概述
文章目录
- 冒泡排序
- 原理
- 脚本实现
- 常规排序
- 原理
- 脚本实现
- 反转排序
- 原理
- 代码实现
冒泡排序
原理
冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。
脚本实现
#!/bin/bash
paixu() {
arr=($@)
echo "旧数组的值为:${arr[@]}"
#获取数组长度
length=${#arr[@]}
#定义比较轮数,一般为数组长度减1
for ((a=1; a<$length; a++))
do
#确定元素的位置,大的往后放,并且比较次数随着轮数的增加二减少
for ((b=0; b<$length-$a; b++))
do
#定义第一个和第二个比较元素的值
first=${arr[$b]}
second=${arr[$b+1]}
#如果第一个元素的值大于第二个元素的值,交换位置
if [ $first -gt $second ];then
#把第一个元素的值赋给一个临时变量temp
temp=$first
#把第二个元素的值赋给第一个元素
arr[$b]=$second
#再把第一个元素的值(temp的值)赋给第二个元素
arr[$b+1]=$temp
fi
done
done
echo "排序后数组的值为:${arr[*]}"
}
list=$@
paixu $list
常规排序
原理
常规排序与冒牌排序的区别是常规排序不是比较相邻的两个元素,每一轮将一个数与数组比较,最大的放在最后,直至排序结束。
脚本实现
#!/bin/bash
#常规排序
arr=(20 50 30 60 10 40)
echo "原数组的值为:${arr[@]}"
length=${#arr[@]}
#定义排序轮数
for ((a=1; a<$length; a++))
do
#假设索引为0的元素是最大的
index=0
#定义和第一个元素比较的索引,来确定最大的元素索引
for ((b=1; b<$length-$a; b++))
do
#定义最大的元素的值
max=${arr[$index]}
#定义从索引1开始比较的元素的值
yuansu=${arr[$b]}
#判断如果从索引1开始比较元素的值大于当前最大元素的值,就记录最大值的索引到index
if [ $yuansu -gt $max ];then
index=$b
fi
done
#定义每一轮比较的最后一个元素的索引
last=$[$length-$a]
#把当前轮次的最后一个元素的值赋给临时变量temp
temp=${arr[$last]}
#把最大的值赋给当前轮次的最后一个元素
arr[$last]=${arr[$index]}
#把temp里的原来最后一个元素的值赋给原最大值所在索引的元素
arr[$index]=$temp
done
echo "排序后的数组为:${arr[*]}"
反转排序
原理
把数组的最后一个元素与第一个元素替换,倒数第二个元素与第二个元素互换,以此类推,直到把所有数组元素反转替换。以相反的顺序把原有数组的内容重新排序。
代码实现
#!/bin/bash
#反转排序
array=(10 70 30 40 50 20 60 30)
echo "数组为 10 70 30 40 50 20 60 30"
length=${#array[*]}
for ((i=0; i<length/2; i++))
do
temp=${array[$i]}
array[$i]=${array[$length-$i-1]}
array[$length-$i-1]=$temp
done
echo ${array[*]}
~
最后
以上就是爱听歌火为你收集整理的Shell脚本中的冒泡排序及其他排序方式的全部内容,希望文章能够帮你解决Shell脚本中的冒泡排序及其他排序方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复