linux sort 算法_Bash 三种排序算法的简单实现

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

3c8ce6380daa33c267ccb0e2e66a02de.png

执行结果,使用默认值

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

{

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

3c8ce6380daa33c267ccb0e2e66a02de.png

原创文章,作者:phosphor,如若转载,请注明出处:http://www.178linux.com/79540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值