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

一、冒泡排序基础

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
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值