欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

shell脚本冒泡排序法——排列数组的从大到小和从小到大(有详细解释)

程序员文章站 2024-03-09 11:47:35
...

一、冒泡排序基础

1.2冒泡排序

类似于气泡上升的动作,会将数据在数组中从大到小或者从小到大不断地向前移动。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

1.2基本思想

冒泡排序的基本思想是对比两个相邻的两个元素,如果满足条件就交换元素值,把较小的元素移动到数组前面,较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。

1.3算法思路

(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
(2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
(3)针对所有的元素重复以上的步骤,除了最后一个。
(4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

1.4冒泡排序案例图解

shell脚本冒泡排序法——排列数组的从大到小和从小到大(有详细解释)

二、实际操作

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