❀记忆冒泡、选择和插入排序算法思想&在bash里运用❀

目录

冒泡排序算法:)

选择排序算法:)

插入排序算法:)


冒泡排序算法:)

思想:依次比较相邻两个元素,重复的进行直到没有相邻元素需要交换,排序完成。

❀记忆冒泡、选择和插入排序算法思想&在bash里运用❀_第1张图片

#!/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[*]}"

插入排序算法:)

思想:将后面的数与前面的数比较,如果后面的数小于前面的数,就将后面的数插入到前面的数的前面。

❀记忆冒泡、选择和插入排序算法思想&在bash里运用❀_第2张图片

#!/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[*]}"

你可能感兴趣的:(学习笔记:),排序算法,算法)