linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
2011年12月19日,參考網上用C語言實現的快速排序,經過一番修改后,用shell(我的測試環境為centos5的bash-v3.x)實現了相同功能:對數組進行升序排序。
注:如果代碼框里的代碼復制出來后顯示異常,就麻煩下載附件chris.zip(已將chris-qsort.sh和chris-algo.sh壓縮打包為chris.zip)
1. shell函數形式(已將其放在附件里,文件名為:chris-qsort.sh。由于沒法上傳.sh腳本,故壓縮打包了一下,文件名為:chris.zip):
Quick_Sort(){
#SortNumeric-arrayinASCorder,?using?normal?Quick-Sort?algorithm.
#C?code:?http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html
#Usage:?Quick_Sort?lowest_index?highest_index?array_name
#e.g.,??Quick_Sort?0?9?array1
#e.g.,??Quick_Sort?1?3?array2
localarray=${3}
evallocalpivot=\$\{${array}[${1}]\}
locallow=${1}
localhigh=${2}
[?${1}?-ge?${2}?]?&&return
while?[?${low}?-lt?${high}?];?do
while?[?${low}?-lt?${high}?-a?${pivot}?-le?$(eval?echo?\$\{${array}[${high}]\})?];?do
let?high--
done
if?[?${pivot}?-gt?$(eval?echo?\$\{${array}[${high}]\})?];then
eval?${array}[${low}]=\$\{${array}[${high}]\}
eval?${array}[${high}]=${pivot}
let?low++
fi
while?[?${low}?-lt?${high}?-a?${pivot}?-ge?$(eval?echo?\$\{${array}[${low}]\})?];?do
let?low++
done
if?[?${pivot}?-lt?$(eval?echo?\$\{${array}[${low}]\})?];then
eval?${array}[${high}]=\$\{${array}[${low}]\}
eval?${array}[${low}]=${pivot}
let?high--
fi
done
#Executethe?Quick_Sortfunctionrecursively
Quick_Sort?${1}?$[${low}-1]?${array}
Quick_Sort?$[${low}+1]?${2}?${array}
unset?array?pivot?low?high
}
2. shell腳本形式,進行簡單測試(已將其放在附件里,文件名為chris-algo.sh。由于沒法上傳.sh腳本,故壓縮打包了一下,文件名為:chris.zip)。
#!/bin/bash
##################################################
##?Author?????:??Chris
##?CreateDate:??2011-12-19
##?ModifyDate:??2012-05-14
##?Realize?common?algorithms?inbash-v3.x
##?Note:?Every?functionrepresents?an?algorithm.
##################################################
#Normal?Quick-Sort?algorithm
Quick_Sort(){
#Sort?Numeric-arrayinASCorder,?using?normal?Quick-Sort?algorithm.
#C?code:?http://www.cnblogs.com/skyaspnet/archive/2010/11/03/1868298.html
#Usage:?Quick_Sort?lowest_index?highest_index?array_name
#e.g.,??Quick_Sort?0?9?array1
#e.g.,??Quick_Sort?1?3?array2
localarray=${3}
eval?localpivot=\$\{${array}[${1}]\}
locallow=${1}
localhigh=${2}
[?${1}?-ge?${2}?]?&&?return
while?[?${low}?-lt?${high}?];?do
while?[?${low}?-lt?${high}?-a?${pivot}?-le?$(eval?echo?\$\{${array}[${high}]\})?];?do
let?high--
done
if?[?${pivot}?-gt?$(eval?echo?\$\{${array}[${high}]\})?];?then
eval?${array}[${low}]=\$\{${array}[${high}]\}
eval?${array}[${high}]=${pivot}
let?low++
fi
while?[?${low}?-lt?${high}?-a?${pivot}?-ge?$(eval?echo?\$\{${array}[${low}]\})?];?do
let?low++
done
if?[?${pivot}?-lt?$(eval?echo?\$\{${array}[${low}]\})?];?then
eval?${array}[${high}]=\$\{${array}[${low}]\}
eval?${array}[${low}]=${pivot}
let?high--
fi
done
#Executethe?Quick_Sortfunctionrecursively
Quick_Sort?${1}?$[${low}-1]?${array}
Quick_Sort?$[${low}+1]?${2}?${array}
unset?array?pivot?low?high
}
main(){
read-ep"Input?Numeric:?"numeric
size=$(echo?${numeric}?|?awk'{print?NF}')
#Define?array
t_array=(${numeric})
#Outputthe?original?array
for((i=0;i
printf?"%d?"${t_array[${i}]}
done
printf?"\n"
#Using?Quick_Sort?functiontosort?t_array
size_1=$[${size}?-?1]
Quick_Sort?0?${size_1}?t_array
#Outputthe?sorted?array
for((i=0;i
printf?"%d?"${t_array[${i}]}
done
printf?"\n"
}
main
輸出如下:
[root@localhost algorithms]# ./chris-algo.sh
49 38 65 97 76 13 27 9 2 1
1 2 9 13 27 38 49 65 76 97
分享!
總結
以上是生活随笔為你收集整理的linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提高WordPress访问速度的十种方法
- 下一篇: 怎么解决eclipse报PermGen