我是靠谱客的博主 爱听歌火,最近开发中收集的这篇文章主要介绍Shell脚本中的冒泡排序及其他排序方式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 冒泡排序
        • 原理
        • 脚本实现
    • 常规排序
      • 原理
      • 脚本实现
    • 反转排序
      • 原理
      • 代码实现

冒泡排序

原理

冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。

脚本实现

#!/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脚本中的冒泡排序及其他排序方式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部