目录
冒泡排序算法:)
思想:依次比较相邻两个元素,重复的进行直到没有相邻元素需要交换,排序完成。
#!/bin/bash
arr=(12 324 543 213 65 64 1 3 45) #定义一个数组
n=${#arr[*]} #获取数组的长度
#外部循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了
for (( i=1; i<=$n-1; i++ ))
do
#内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少
for (( j=0; j<$n-$i; j++ ))
do
if [ ${arr[j]} -gt ${arr[j+1]} ];then #如果前面的数比后面的数大
c=${arr[j]}; arr[j]=${arr[j+1]}; arr[j+1]=$c #就交换位置
fi
done
done
echo "冒泡排序后的数组为:${arr[*]}"
选择排序算法:)
思想:每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。
#!/bin/bash
arr=(5 2 8 1 9) #定义待排序的数组
n=${#arr[*]} #获取数组长度
# 外层循环,控制比较的轮数
for ((i=0; i<$n-1; i++))
do
s=$i #假设当前轮次的第一个元素为最小值
#内层循环,从当前轮次的第二个元素开始,依次与最小值比较
for ((j=i+1; j<$n; j++))
do
if [[ arr[j] -lt arr[s] ]] #如果找到更小的元素
then
s=$j #则更新最小值的索引
fi
done
#将最小值与当前轮次的第一个元素交换位置
c=${arr[i]}; arr[i]=${arr[s]}; arr[s]=$c
done
echo "选择排序后的数组为:${arr[*]}"
插入排序算法:)
思想:将后面的数与前面的数比较,如果后面的数小于前面的数,就将后面的数插入到前面的数的前面。
#!/bin/bash
arr=(23 3 34 652 454 122 4 6) #定义一个数组
n=${#arr[*]} #获取数组的长度
for (( i=1; i<$n; i++ ))
do
for (( j=0; j<$i; j++ ))
do
if [[ ${arr[i]} -lt ${arr[j]} ]];then #如果后面的数小于前面的数
c=${arr[i]}; arr[i]=${arr[j]}; arr[j]=$c #则交换位置,将后面的数插入到前面的数的前面
fi
done
done
echo "插入排序后的数组为:${arr[*]}"