一.排序
1.冒泡排序
#!/bin/bash
function maopao_paixu(){
arr=($@)
# 获取数组的长度
len=${#arr[@]}
#外层循环用来定义比较轮数,比较轮数为数组长度减1,且从1开始
for ((i=1; i<len; i++)); do
#内层循环用来确定比较元素的位置,比较相邻两个元素,较大的元素往后移,并且比较次数会随着比较轮数的增加而减少
for ((j=0; j<len-i; j++)); do
#获取相邻两个元素的前面元素的值
first=${arr[$j]}
#获取相邻两个元素的后面元素的值
h=$[j + 1]
second=${arr[$h]}
#比较两个相邻元素的值大小,如果前面元素的值较大,则与后面元素交换位置
if [ $first -gt $second ]; then
#使用临时变量保存前面元素的值,实现两个相邻元素交换位置
tmp=$first
arr[$j]=$second
arr[$h]=$tmp
fi
done
done
echo "冒泡排序后的数组的值为:" ${arr[@]}
}
read -p "请输入一组列表" num
array=($num)
echo "原数组为:" ${array[@]}
MAOPAO ${array[@]}
2.选择排序
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "排序前的数组的值为:${arr[@]}"
length=${#arr[@]}
#外层循环定义排序的轮数,为数组长度减1,且从1开始
for ((a=1; a<length; a++));do
#每轮比较的初始最大元素的下标,从0开始,即第一个元素
i=0
#内层循环定义用于与当前最大元素作比较的元素下标范围,从1开始,且每轮比较的最后一个元素下标会随着轮数怎加而减少
for ((b=1; b<=length-a; b++));do
#通过比较,获取当前轮数中最大元素的下标
if [ ${arr[$i])} -lt ${arr[$b]} ];then
i=$b
fi
done
#获取当前轮数的最后一个元素的下标
last=$[length - a]
#先用临时变量获取当前轮数的最后一个元素的值
tmp=$(arr[$last])
#将最大元素的值赋给当前轮数的最后一个元素
arr[$last]=${arr[$i]}
#将临时变量的值,即原最后一个元素的值交换
arr[$i]=$tmp
done
3.插入排序
#!/bin/bash
arr=(63 4 24 1 3 15)
echo "排序前数组的值为:${arr[@]}"
length=${#arr[@]}
# 外层循环定义待排序的元素下标位置
for ((a=1; a<length; a++));do #内层循环定义已排好的序列的元素下标位置范围
for ((b=0; b<a; b++));do #将待排序的元素和前面已经排序好的元素依次比较,较小的数会交换到已排好序的元素位置
if [ ${arr[$a]} -lt ${arr[$b]} ];then
tmp=${arr[$a]}
arr[$a]=${arr[$b]}
arr[$b]=$tmp
fi
done
done
echo "排序后数组的值为:${arr[@]}"
4.反转排序
#!/bin/bash
arr=(1 2 3 4 5 6 7 8 9)
echo "排序前数组的值为:${arr[@]}"
length=${#arr[@]}
for ((a=0; a<length/2; a++));do
tmp=${arr[$a]}
#获取当前轮数的最后一个元素下标,会随着轮数的增加而减少
last=$[length-1-a]
arr[$a]=${arr[$last]}
arr[$last]=$tmp
done
echo "排序后数组的值为:${arr[@]}"
5.希尔排序
#!/bin/bash
array=(7 6 8 3 1 5 2 4)
echo ${array[*]}
length=${#array[*]}
#把距离为gap的元素编为一个组,扫描所有组,每次循环减少增量
for ((gap=$length/2; gap>0; gap/=2)); do
for ((i=gap; i<$length; i++)); do
temp=${array[$i]}
#对距离为gap的元素组进行排序,每一轮比较拿当前轮次最后一个元素与组内其他元素比较,将数组大的往后放
for ((j=i-gap; j>=0&&temp<${array[$j]}; j-=gap)); do
array[$j+$gap]=${array[$j]}
done
#和最左边较大的元素调换位置
array[$j+$gap]=$temp
done
done
echo ${array[*]}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律