Shell指令碼之陣列排序 冒泡 直接和反轉排序

2021-10-22 19:16:25 字數 1612 閱讀 1070

直接選擇排序

反轉排序

這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端(公升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名「氣泡排序」

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

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

#!/bin/bash

a=(34 5 6 12 23 61)

b=`echo $`

echo

"原陣列的排序為$b"

c=$for

((i=1;i<$c

;i++))

dofor

((k=0;k<$c

-1;k++))

j=$[

$k+1]

second=$if[

$first

-gt$second

] then

temp=$first

a[$k]=$second

a[$j]=$tempfi}

done

echo

"排序後的輸出為$"

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

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

#!/bin/bash

a=( 34 5 6 12 23 61)

length=$

for(

(i=1;i<$length

;i++))

do index=0

for((j=1;j<=$length

-i;j++))

-gt $

] then

index=$j

fi} temp=$

a[$length-$i

]=$ a[

$index

]=$temp

done

echo

"排序後的輸出為$"

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

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

#!/bin/bash

a=(1 2 3 4 5 6)

length=$

for(

(i=0;i<$length

/2;i++))

do temp=$

a[$i]=$

a[$length-$i

-1]=$temp

done

echo $

Shell指令碼之陣列

陣列是存放相同型別資料的集合,陣列中可以存放多個值,經常配合迴圈語句進行使用。例如 有乙個陣列 num 15 16 17 18 19 陣列名稱 num 陣列元素 第1個 11 陣列長度 5 陣列下標 元素18所對應的下標為3shell 陣列用括號來表示,元素用 空格 符號分割開,語法格式如下 方法一...

shell指令碼之陣列

陣列中可以存放多個值。bash shell只支援一維陣列,初始化時不需要定義陣列大小。與大部分程式語言類似,陣列元素的下標由0開始。shell陣列用括號來表示,元素用 符號來分割開,語法格式如下 array name n1 n2 n3 ns 例項 array name a b c d 我們也可以使用...

Shell氣泡排序

通過對資料迴圈排序,得出數值大小,進行排序。bin bash 氣泡排序 score 10 511007060 for i 1 i i dofor j 0 j i j doif gt then temp 中間變數 score j score j 1 temp fidone done echo 此處 j...