秒懂的shell程式設計陣列與冒泡演算法排序詳解

2021-10-23 19:38:22 字數 2967 閱讀 9448

四 、冒泡演算法排序

方法1:

陣列名=(value0 value1 value2 …)

方法2:

陣列名=([0]=value [1]=value [2]=value)

方法3:

列表名=「value0 value1 value2 …」

陣列名=($列表名)

方法4:

陣列名[0]=「value」

陣列名[1]=「value」

陣列名[2]=「value」

……獲取陣列的長度

arr_length=$

陣列切片

[root@localhost ~]

# a=(1 2 3 4 5)

[root@localhost ~]

# echo $ //輸出整個陣列

1 2 3 4 5

[root@localhost ~]

# echo $ #$

3 4 5

注意:將陣列切片之後,返回的是字串,以空格作為分隔符

陣列替換

arr=

(1 2 3 4 5)

echo

$ //$

1 2 3 66 5

echo

$ //並不會替換陣列原有內容

1 2 3 4 5a=(

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

echo

$1 2 3 66 5

刪除陣列

[root@localhost ~]

# arr=(1 2 3 4 5)

[root@localhost ~]

# unset arr //刪除整個陣列

[root@localhost ~]

# unset arr[2] //刪除第三個元素

[root@localhost ~]

# echo $

1 2 4 5

陣列新增元素

方法1 array_name[index]

=value

方法2 array_name[$]

=value

方法3 array_name=

("$" value1 ... valuen)

方法4 array_name+=

(value1 value 2 ... valuen)

注意:

"$"中雙引號不能省略,否則當陣列array_name**現包含

空格的元素時會按空格將元素拆分成多個

不能把@替換成*,否則在加雙引號時會把陣列array_name中的所有元素作為乙個元素新增到陣列中

在函式中呼叫陣列的時候可能會出現下面的問題

#!/bin/bash

test1()}

array=(3 2 1 4 5)

echo

"原始的陣列值為$"

test1 $array

執行結果如下圖所示

此時需要將陣列變數的值分解成單個的值,然後把這些值作為函式引數使用。在函式內部,再將所有的引數重新組合成乙個新的陣列變數。

演示**如下:

#!/bin/bash

test2()"

}array=(3 2 1 4 5)

echo

"原始的陣列值為$"

test2 $ //此處必加,表示把這個陣列看作乙個整體

執行結果如下

test3(

)*2]

}echo$}

array=

(3 2 1 4 5)

result=

($(test3 $))

echo

"新陣列的值為:$"

氣泡排序

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

基本思想:

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

演算法思路

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

**實現

#!/bin/bash

paixu(

);i++

)) ##比較輪數為陣列長度減1,從1開始

dofor

((j=

0;j)) ##比較相鄰兩個元素,較大的數往後放,比較次數隨比較比較輪數而減少

doif

[$ -gt $

]##如果第乙個元素比第二個元素大就互換

then

temp=

$##把第乙個元素值儲存在臨時變數中

array[$j]

=$##把第二個元素值儲存到第乙個元素中

array[$[

$j+1]]=

$temp

##把臨時變數(也就是第乙個元素原值),儲存到第二個元素中

fidone

done

echo$}

#主體**

f=$(

cat $1)

paixu $f

執行結果如下

陣列的使用與氣泡排序

int array new int 10 intarrays 0,1,int arrays 列印出陣列的值 system.out.println arrays.tostring arrays 陣列進行公升序排序 arrays.sort arrays system.out.println arrays...

Shell程式設計中的陣列定義 遍歷

陣列定義 1 arr 1 2345 注意是用空格分開,不是逗號!陣列定義法2 12 3 4 array array 0 a array 1 b array 2 c 獲取陣列的length 陣列中有幾個元素 1 遍歷 for迴圈法 12 3 4 forvarin doecho var done 遍歷 ...

Shell程式設計中的陣列定義 遍歷

陣列定義法1 arr 1 2 3 4 5 注意是用空格分開,不是逗號!陣列定義法2 array array 0 a array 1 b array 2 c 獲取陣列的length 陣列中有幾個元素 遍歷 for迴圈法 for var in do echo var done 遍歷 帶陣列下標 for ...