shell脚本冒泡排序法——排列数组的从大到小和从小到大(有详细解释)
程序员文章站
2024-03-09 11:47:35
...
一、冒泡排序基础
1.2冒泡排序
类似于气泡上升的动作,会将数据在数组中从大到小或者从小到大不断地向前移动。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
1.2基本思想
冒泡排序的基本思想是对比两个相邻的两个元素,如果满足条件就交换元素值,把较小的元素移动到数组前面,较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
1.3算法思路
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1.4冒泡排序案例图解
二、实际操作
2.1升序
vim test1.sh
#!/bin/bash
array=(3 2 5 1 4)
#输入数组元素
a=${#array[*]}
for ((i=1;i<$a;i++))
do
for ((j=0;j<$a-1;j++))
#这里要特别注意变量与变量之间的括号千万不能写错,否则脚本会报错无法运行
do
if [ ${array[$j]} -gt ${array[$j+1]} ];then
#交换数据
#-gt(greater than)大于,比较$j和$j+1的大小,如果$j大于$j+1则
temp=${array[$j]}
array[$j]=${array[$[$j+1]]}
array[$[$j+1]]=$temp
fi
#结束if
done
done
echo ${array[*]}
#输出排序后的结果
chmod +x test.sh
#给test1.sh执行权限
./test1.sh
#运行test1.sh脚本
1 2 3 4 5
2.2升序
vim test2.sh
#!/bin/bash
array=(3 2 5 1 4 6 7 9 8)
#输入数组元素
a=${#array[*]}
for ((i=1;i<$a;i++))
#外循环
do
for ((j=0;j<$a-1;j++))
#这里要特别注意变量与变量之间的括号千万不能写错,否则脚本会报错无法运行
do
if [ ${array[$j]} -lt ${array[$j+1]} ];then
#交换数据
#-lt(lesser than)小于,比较$j和$j+1的大小,如果$j小于$j+1则
temp=${array[$j]}
array[$j]=${array[$[$j+1]]}
array[$[$j+1]]=$temp
fi
#结束if
done
done
echo ${array[*]}
#输出排序后的结果
chmod +x test2.sh
#给test1.sh执行权限
./test2.sh
#运行test1.sh脚本
9 8 7 6 5 4 3 2 1