shell编程:冒泡排序的原理+实操

本文介绍了冒泡排序的原理,并通过具体的shell脚本示例展示了如何利用shell进行冒泡排序。文中详细解释了如何从小到大以及从大到小进行排序,并提供了将数组和文件内容进行冒泡排序的脚本代码,包括设置不换行和换行输出的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序

在这里插入图片描述

如图所示:
冒泡排序的流程图
在这里插入图片描述
在这里插入图片描述

下面来举一个例子

创建脚本:vi test.sh

让数组里的数字自动从小到大排序

在这里插入图片描述

编辑脚本:

#!/bin/bash
array=(3 2 5 1 4)
for ((i=1;i<${#array[*]}; i++))    #比较轮数为数组,长度减一,从1开始
do
for ((j=0; j<${#array[*]}-i; j++)) #比较相邻的两个元素,较大的数往后放
do
if [ ${array[$j]} -gt ${array[$[$j + 1]]} ];then
temp=${array[$j]}                #把第一个元素值保存到临时变量中
array[$j]=${array[$[$j+1]]}   #把第二个元素值保存到第一个元素中
array[$[$j+1]]=$temp   #把临时变量(也就是第一个元素原值) 保存到第二个元素中
fi
done
done
echo ${array[*]}

执行脚本:
在这里插入图片描述

再从大往小进行排列

  • 只需要把这一行代码的"gt"大于 改为"lt"小于即可实现
if [ ${array[$j]} -lt ${array[$[$j + 1]]} ];then

执行:
在这里插入图片描述

在家目录中创建一个arr.txt文件,内容如下,请用冒泡排序对此文件内容排序,要求冒泡排序部分代码使用函数调用

编辑脚本:

[root@localhost ~]# vi test3.txt
test1(){      //定义函数
e=($(echo $@))   //将分解的数组参数合并,并且组成一个新的数组
for ((i=1;i<${#e[*]};i++))    //设置排序轮数 ,轮数等于数组长度-1
do
for ((j=0;j<${#e[*]}-i;j++))    //比较次数随着轮数-1
do
if [ ${e[$j]} -gt  ${e[$[$j+1]]} ];then //设置if条件如果元素1 比元素2大该如何?
temp=${e[$j]}     //把第一个元素值保存到临时变量中
e[$j]=${e[$[$j+1]]}    //把第二个元素值保存到第一个元素中
e[$[$j+1]]=$temp      //把临时变量(也就是第一个元素原值)保存到第二个元素值中
fi   
done
done
echo "${e[*]}"
}
#array=(44 66 11 33 22 55 88 77)    #定义数组
bbc=($(awk '{print $1}' arr.txt))       
a=${bbc[*]}
d=(`test1 $a`)
#echo "${d[*]}"
for v in ${d[*]}
do
echo  $v

执行脚本:
让文件里的数字竖着排序

在这里插入图片描述

arr.txt目录加的内容:

在这里插入图片描述

添加这几行代码:echo -n “$v空格” 设置输出为不换行输出,每个字符之间有空格,done下面加个echo 换行输出将特殊字符取消掉

在这里插入图片描述

让文件里的数字横着排序

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值