1. 程式人生 > 其它 >陣列基本操作及陣列排序演算法(冒泡演算法,直接選擇排序,反轉排序)

陣列基本操作及陣列排序演算法(冒泡演算法,直接選擇排序,反轉排序)

陣列

一.前言

括起來的中間由空格的為列表,以()括起來中間空格的為陣列,陣列中不一定是陣列也可以是字母,字串,裡面的每一個字元叫元素,元素下標(數引),從0開始

a b c d 10 20

30 20 10 60 50 40

0 1 2 3 4 5

陣列包括的資料型別

(一)數值型別

(二)字元型別,使用定義

二.陣列的定義方法

方法一:

格式:陣列名=value0 value1 value2 ........

方法二:

格式:陣列名=[0]=value [1]=value [2]=value....

這種方法前面 [ ]部分為數組裡面元素的下標,從0開始,即使順序混亂也會按照下標0 1 2 3.....

順序排列,如果中間跳過某個下標那該下標的元素佔時為空

方法三:

格式:列表名=value0 value1 value2......

陣列名=$列表名)

方法四:

格式:陣列名[0]=value

陣列名[1]=value

陣列名[2]=value

三.獲取陣列值,獲取陣列長度

(一)獲取陣列值

格式:echo ${陣列名[@]} 或者 echo ${陣列名[*]}

(二)獲取陣列長度

格式:echo ${#陣列名[@]}

(三)讀取某下標賦值

格式:echo ${#陣列名[下標]}

四.陣列遍歷

使用迴圈讀取陣列內容進行遍歷

注意:如果讀取陣列加上雙引號,陣列內容讀取中[ ]

裡面*代表一個整體遍歷,@則會一個個顯示出來

五.陣列切片

格式:echo ${陣列名[@]:起始位置:長度}

六.陣列替換

數字替換字元會替換匹配到的所有字元,

格式:echo ${陣列名[@*]/查詢字元/替換字元}

但是並不會替換陣列原有的內容,只是臨時替換內容輸出

要實現改變原有陣列,可通過重新賦值實現

示例:abc=($abc[@]/20/50)

echo ${abc[@]}

也可以使用定義某個元素的值來改變

示例:abc[2]=50

如果不按照元素下標修改會將匹配到所有的元素都更改

七.刪除陣列

格式:unset 陣列名 刪除陣列

或者 unset 陣列名[下標]

刪除第幾個元素

如果刪除的下標為中間某一個,下標順序不會往前縮排,只是該下標數值為空

八.變數追加元素

方法一:單個新增

格式:陣列[下標]=元素

方法二:在不進行任何刪減時,直接使用陣列長度追加元素

格式:陣列[${#陣列[@]}]=元素

但是如果定義時漏了某個元素,使用該方法可能直接修改某個元素

方法三:直接獲取源陣列的全部元素再加上新要新增的元素,一併重新賦予該陣列,重新重新整理定義索引

格式:陣列=[${陣列[@]}新元素1新元素2

雙引號不能省略,否則,當陣列中存在包含空格的元素時會按空格將元素拆分成多個不能將"@"替換為"*",如果替換為"*",不加雙引號時與"@"的表現一致,加雙引號時,會將陣列中的所有元素作為一個元素新增到新的陣列中,如果新增的新元素不是數字需要加上雙引號或者單引號

方法四:待新增元素必須用“()”包圍起來,並且多個元素用空格分隔

格式:陣列+=(元素1 元素2 .....

九.向函式傳陣列引數

如果將陣列變數作為函式引數,函式只會取陣列變數的第一個值

想要完成獲取引數

函式獲取陣列引數並進行*2輸出

陣列排序演算法

一.氣泡排序

類似氣泡上湧的動作,會將資料在陣列中從小到大或者從大到小不斷的向前移動

基本思想

氣泡排序的基本思想是對比相鄰的兩個元素值,如果滿足條件就交換元素值,把較小的元素移動到陣列前面,把大的元素移動到陣列後面 (也就是交換兩個元素的位置),這樣較小的元素就像氣泡一一樣從底部上升到頂部

演算法思路

冒泡演算法由雙層迴圈實現,其中外部迴圈用於控制排序輪數,一般為要排序的陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比, 同時陣列已經完成排序了。而內部迴圈主要用於對比陣列中每個相鄰元素的大小,以確定是否交換位置,對比和交換次數隨排序輪數而減少

示例:

二.直接選擇排序

與氣泡排序相比,直接選擇排序的交換次數更少,所以速度會快些

基本思想∶

將指定排序位置與其它陣列元素分別對比,如果滿足條件就交換元素值,注意這裡區別氣泡排序, 不是交換相鄰元素, 而是把滿足條件的元素與指定的排序位置交換 (如從最後一一個元素開始排序) ,這樣排序好的位置逐漸擴大, 最後整個陣列都成為已排序好的格式

示例:

三.反轉排序

以相反的順序把原有陣列的內容重新排序

基本思想:

把陣列最後一個元素與第一個元素替換,倒數第二個元素與第二個元素,以此類推,直到把所有陣列元素反轉替換

示例: