冒泡排序运用
1.1 解析
通过对数据循环排序,得出数值大小,进行排序
1.2 排序流程
score =(10 5 1 100 70 60)
第一轮 比较了5次
10 5 1 100 70 60
5 10 1 100 70 60 1次
5 1 10 100 70 60 2次
5 1 10 100 70 60 3次
5 1 10 70 100 60 4次
5 1 10 70 60 100 5次 得出最大数值
第二轮 比较了4次
5 1 10 70 60
1 5 10 70 60 1次
1 5 10 70 60 2次
1 5 10 70 60 3次
1 5 10 60 70 4次 得出倒数第二大数值
第三轮 比较了3次
1 5 10 60 得出倒数第三大数值
第四轮 比较了2次
1 5 10 得出倒数第四大数值
第五轮 比较了1次
1 5 得出倒数第五大数值
1.3 脚本排序
[root@server2 ~]# vi maopao.sh
[root@server2 ~]# chmod +x maopao.sh
[root@server2 ~]# ./maopao.sh
#!/bin/bash
# 冒泡排序
score=(10 5 1 100 70 60)
for ((i=1;i<${#score[*]};i++))
do
for ((j=0;j<${#score[*]}-$i;j++))
do
if [ ${score[j]} -gt ${score[$(($j+1))]} ]
then temp=${score[j]} 中间变量
score[j]=${score[$(($j+1))]}
score[$(($j+1))]=$temp
fi
done
done
echo ${score[*]}
此处[$(($j+1))]可以替换为[j+1]
以上方法较为局限,需要给定数值才可计算
1.4 键盘输入冒泡排序
[root@server2 ~]# vi maopao.sh
[root@server2 ~]# chmod +x maopao.sh
[root@server2 ~]# ./maopao.sh
#!/bin/bash
# 键盘输入冒泡排序
k=0 数组第一位元素
while true 一直继续,循环
do
read -p "是否需要输入数值?" do 变量名
if [ $do == "no" ] 只要不输入no就一直继续
then break 退出循环
fi
read -p "请输入第$(($k+1))个元素" key
score[$k]=$key
let k++
done
for ((i=1;i<${#score[*]};i++))
do
for ((j=0;j<${#score[*]}-$i;j++))
do
if [ ${score[j]} -gt ${score[j+1]} ]
then temp=${score[j]}
score[j]=${score[j+1]}
score[j+1]=$temp
fi
done
done
echo ${score[*]}