shell脚本的冒泡排序法(排列数组由小到大,有详细解释)
程序员文章站
2024-02-20 19:28:22
...
- 冒泡排序,就是多次比较数组的俩个元素,然后进行排序
- 原理分析:
arr=(12 77 60 90 10)将数组有小到大排序
用冒泡排序法分析:
首先第一个数跟第二个数比较,小的放在前面输出,大的排到后面输出
然后在用大的跟后面一个数比较,同样小的在前输出,大的排后面
一次类推比较。
第一轮比完,此时最大的数是排在了最后面,比较出了一个数
然后第二轮比,排出第二个大的数在倒数第二位
以此类推,经过${#arr[@]}-1此比较,即可有小到大排出结果
第一轮比较:
第一次比较:arr[0]=12 < arr[1]=77 将小的赋值arr[0],大的赋值arr[1]中间要一个变量过度
结果:arr=(12 77 60 90 10)
第二次比较:arr[0]=77 > arr[1]=60
结果:arr=(12 60 77 90 10)
....
第四次比较:arr[3]=90 > arr[4]=10
结果:arr=(12 60 77 10 90)
第一轮比较将最大数90 排到了最后
第二轮比较:...
......以此类推
- 示例:
#!/bin/bash
list=(90 20 10 70 80 99 77 55 95 76) ##定义一个数组
for ((i=1;i<${#list[*]};i++));do ##外层循环 每一轮
for ((j=0;j<${#list[@]}-1;j++));do ##内层循环 每一次
if [ ${list[j]} -gt ${list[j+1]} ];then
t=${list[j]} ##变量暂时存放元素,实现元素交换
list[j]=${list[j+1]} ##将小的数放到前面
list[j+1]=$t ##大的元素放在后面,然后继续做比较
fi
done
done
echo "${list[*]}" ##输出所有