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
maopao1
执行结果,使用默认值
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
网友评论