1、冒泡算法1
從第一開始,取每個元素和,和后面元素比較,如果比自己大就和自己交換。
#!/bin/bash typeset -a arry #變量聲明 if [[ $# -ne 0 ]];then for i in `seq 0 $(($#-1))`;do #循環遍歷$@賦值給數組 arry[i]=$1 shift done else arry=( 1 4 7 2 5 8 3 6 9) #設置默認值,當空輸入時候使用 fi echo "${arry[@]}" #輸出原始順序 long=${#arry[@]} for j in `seq 0 $(($long-1))`;do for i in `seq 0 $((${#arry[@]}-1))`;do if [[ ${arry[$j]} -gt ${arry[$i]} ]];then #從arry[0]開始與后面每一個比大小 a=${arry[$j]} arry[$j]=${arry[$i]} arry[$i]=$a echo "${arry[@]}" else : # echo "${arry[@]}" fi done done
執行結果,使用默認值
1 4 7 2 5 8 3 6 9 4 1 7 2 5 8 3 6 9 7 1 4 2 5 8 3 6 9 7 4 1 2 5 8 3 6 9 7 4 2 1 5 8 3 6 9 7 5 2 1 4 8 3 6 9 7 5 4 1 2 8 3 6 9 7 5 4 2 1 8 3 6 9 8 5 4 2 1 7 3 6 9 8 7 4 2 1 5 3 6 9 8 7 5 2 1 4 3 6 9 8 7 5 4 1 2 3 6 9 8 7 5 4 2 1 3 6 9 8 7 5 4 3 1 2 6 9 8 7 5 4 3 2 1 6 9 8 7 6 4 3 2 1 5 9 8 7 6 5 3 2 1 4 9 8 7 6 5 4 2 1 3 9 8 7 6 5 4 3 1 2 9 8 7 6 5 4 3 2 1 9 9 7 6 5 4 3 2 1 8 9 8 6 5 4 3 2 1 7 9 8 7 5 4 3 2 1 6 9 8 7 6 4 3 2 1 5 9 8 7 6 5 3 2 1 4 9 8 7 6 5 4 2 1 3 9 8 7 6 5 4 3 1 2 9 8 7 6 5 4 3 2 1
2、冒泡2
相鄰元素兩兩比較,如果后面比前面小就交換
#!/bin/bash typeset -a arry arry=(1 4 7 2 5 8 3 6 9) long=${#arry[@]} b=$long for j in `seq 0 $b`;do for i in `seq 0 $((${#arry[@]}-2))`;do if [[ ${arry[$i]} -gt ${arry[$(($i+1))]} ]];then a=${arry[$(($i+1))]} arry[$(($i+1))]=${arry[$i]} arry[$i]=$a echo "${arry[@]}" else : #echo "${arry[@]}" fi done done
執行結果:
1 4 2 7 5 8 3 6 9 1 4 2 5 7 8 3 6 9 1 4 2 5 7 3 8 6 9 1 4 2 5 7 3 6 8 9 1 2 4 5 7 3 6 8 9 1 2 4 5 3 7 6 8 9 1 2 4 5 3 6 7 8 9 1 2 4 3 5 6 7 8 9 1 2 3 4 5 6 7 8 9
3、快速排序
通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
for i in `seq 0 "$(($#-1))"`;do a[i]=${!i} #eval echo \$$i $$-->pid done echo ${a[@]} swap() { tmp=${a[$1]} a[$1]=${a[$2]} a[$2]=$buff } typeset -i t fun() { i=$(($1-1)) j=$1 t=${a[$2]} if test $1 -ge $2 ;then return 2 fi while [ $j -le $2 ];do while [ $j -lt $2 -a ${a[$j]} -gt $t ] ;do j=$(($j+1)) done i=$(($i+1)) swap $i $j j=$(($j+1)) done fun 0 $(($i-1)) fun $(($i+2)) $2 } fun 0 $((${#a[@]}-1)) for((i=0;i<$((${#a[@]}-1));i++)) { echo -n ${a[$i]} " " } echo exit 0
執行結果
[root@localhost ~]# bash sort2.sh 1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13 1 5 8 2 4 7 3 6 9 0 40 12 32 8 12 13 0 1 2 3 4 5 6 7 8 8 9 12 12 13 32 40
原創文章,作者:phosphor,如若轉載,請注明出處:http://www.www58058.com/79540