Shell脚本实现数组冒泡排序等简单算法排序

这篇具有很好参考价值的文章主要介绍了Shell脚本实现数组冒泡排序等简单算法排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、冒泡排序

1.简介

2.基本思想

3.算法思路

4.shell脚本实现

二、选择排序

1.简介

2.基本思想

3.shell脚本实现

三、插入排序

1.算法思路

2.shell脚本实现

四、反转排序

1.作用

2.shell脚本实现


一、冒泡排序

1.简介

类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

2.基本思想

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值, 把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的 位置),这样较小的元素就像气泡一样从底部上升到顶部。

3.算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

4.shell脚本实现

[root@localhost1 ~]#vim sort.sh
#!/bin/bash
arr=(12 324 543 213 65 64 1 3 45)
length=${#arr[@]}
​
for ((i=1;i<=length-1;i++))
  do
    for ((j=0;j<length-i;j++))
    do
      first=${arr[$j]}
      k=$[$j + 1]
      second=${arr[$k]}
      if [ $first -gt $second ];then
        temp=$first
        arr[$j]=$second
        arr[$k]=$temp
      fi
    done
  done
echo "升序排列后:${arr[@]}"
​
for ((i=1;i<=length-1;i++))
  do
    for ((j=1;j<=length-i;j++))
    do
      second=${arr[$j]}
      k=$[$j - 1]
      first=${arr[$k]}
      if [ $first -lt $second ];then
        temp=$second
        arr[$j]=$first
        arr[$k]=$temp
      fi
    done
  done
echo "降序排列后:${arr[@]}"
​
[root@localhost1 ~]#bash sort.sh
升序排列后:1 3 12 45 64 65 213 324 543
降序排列后:543 324 213 65 64 45 12 3 1

二、选择排序

1.简介

与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。

2.基本思想

将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

3.shell脚本实现

[root@localhost1 ~]#vim selectsort.sh
#!/bin/bash
arr=(21 232 34 545 12 4 65 2)
length=${#arr[@]}
for ((a=1;a<length;a++))
do
  index=0
  for ((b=1;b<=length-a;b++))
  do
    if [ ${arr[$b]} -gt ${arr[$index]} ];then
      index=$b
    fi
  done
  last=$[length - a]
  temp=${arr[$last]}
  arr[$last]=${arr[$index]}
  arr[$index]=$temp
done
​
echo "排序后的数组为:${arr[@]}"
​
​
[root@localhost1 ~]#vim selectsort.sh
[root@localhost1 ~]#bash selectsort.sh
排序后的数组为:2 4 12 21 34 65 232 545

三、插入排序

1.算法思路

选择一个元素,依次从前往后比较,如果升序,就将较小的数放在前面,将较大的数放在后面待比较的位置。

2.shell脚本实现

[root@localhost1 ~]#vim insertsort.sh
#!/bin/bash
arr=(23 3 34 652 454 122 4 6)
length=${#arr[@]}
​
for ((a=1;a<length;a++))
do
  for ((b=0;b<a;b++))
  do
    if [ ${arr[$a]} -lt ${arr[$b]} ];then
      temp=${arr[$a]}
      arr[$a]=${arr[$b]}
      arr[$b]=$temp
    fi
  done
done
​
echo "排序后的数组为:${arr[@]}"
​
[root@localhost1 ~]#bash insertsort.sh
排序后的数组为:3 4 6 23 34 122 454 652

四、反转排序

1.作用

将数组中所有的元素反转排序。文章来源地址https://www.toymoban.com/news/detail-488786.html

2.shell脚本实现

[root@localhost1 ~]#vim reservesort.sh
#!/bin/bash
#反转排序
arr=(10 20 30 40 50 60 70 80 90)
length=${#arr[@]}
#设置前后两个替换元素中的前面的元素下标的取值范围,下标用0开始
for ((a=0; a<length/2; a++))
do
  temp=${arr[$a]}
  arr[$a]=${arr[$length-1-$a]}
  arr[$length-1-$a]=$temp
done
echo "反转排序后的数组顺序为: ${arr[@]}"
​
[root@localhost1 ~]#bash reservesort.sh
反转排序后的数组顺序为: 90 80 70 60 50 40 30 20 10

到了这里,关于Shell脚本实现数组冒泡排序等简单算法排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java练习题-用冒泡排序法实现数组排序

    ✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又一座的高山,那样的人生才是我想要的。这一马平川,一眼见底的活,我不想要,我的人生

    2024年02月08日
    浏览(53)
  • shell数组(包含排序算法)

    目录 一:数组定义方法 1、方法一 2、方法二 ​3、方法三 ​4、方法四  5、判断数组是否完整 (1)方法一 (2)方法二:通过脚本 二:获取数组值 1、获取数组长度  2、获取数组数据列表 3、获取数组下标列表 4、读取某下标赋值 ​5、数组遍历  6、求数组所有的数值的和

    2024年02月04日
    浏览(71)
  • C语言实现冒泡排序排列数组中的元素!

     按照 图中的方法 来编写程序: 1、 void* base,    //base中存放的是待排序数据中第一个对象的地址 2、 size_t num,    // 待排序数据元素的个数 3、 size_t width,    // 待排序数据中一个元素的大小,单位是字节 4、i nt(__cdecl* compare)(const void* elem1, const void* elem2) // 函数指针  用来比

    2024年02月15日
    浏览(32)
  • 【排序算法】C语言实现选择排序与冒泡排序

    这里是阿辉算法与数据结构专栏的第一篇文章,咱们就从排序算法开始讲起,排序算法有很多大致分为两类:基于比较的排序和非比较的排序 基于比较的排序:冒泡、选择、插入、希尔、堆、归并、随机快排 非比较的排序:桶排序 以上的排序算法阿辉都会讲到,今天阿辉主

    2024年02月04日
    浏览(40)
  • 冒泡排序算法实现步骤

    算法实现的过程: 1. 定义问题:    - 算法是用来解决某一特定计算问题的方法步骤。例如,对于排序问题,我们需要一个算法对一组无序的整数进行排序。 2. 设计算法:    - 冒泡排序是一种基础的排序算法。它的设计思路是重复遍历要排序的数列,每次遍历时都将相邻两

    2024年04月11日
    浏览(42)
  • C语言算法——实现冒泡排序

    默认数组中的第一个数是原本数组中排好序的第一个数,然后每次将排好序的数组的后面的第一个数作为哨兵。每次哨兵都和前面的排好序的数组中的数从后往前进行比较,然后将哨兵插入到已经排好序的数组中。然后哨兵逐渐往后移动,逐步将哨兵插入到数组中,这就是

    2024年02月04日
    浏览(48)
  • 稳定的排序算法:直接插入排序和冒泡排序 (c++实现)

    1.直接插入排序: 插入排序:就是把数组分为左右两个序列,保持左边序列中所有元素是有序的,(当左边序列只有第一个元素时,本身就是有序的,)每次往后移一个,将这个元素保存起来,跟左边的元素进行比较,直到找到第一个小于它的元素后停下,此时的位置是这个

    2024年02月10日
    浏览(43)
  • C++实现冒泡排序算法(含源码)

    C++实现冒泡排序算法(含源码) 冒泡排序是一种简单的排序算法,它通过不断交换相邻的元素,将较大的元素逐步\\\"浮\\\"到待排序列的尾部,从而实现排序。下面是C++的冒泡排序实现代码: 该函数接受一个整型数组和数组长度作为参数,在每次遍历中,它比较相邻的两个元素,将

    2024年02月07日
    浏览(41)
  • 用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

      目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 冒泡排序是众多排序的一种,无论在C语言或者Java中都很常见,后续在数据结构中也会用到 1.冒泡排序介绍 (1)冒泡排

    2024年02月05日
    浏览(43)
  • 【C语言】解析C语言实现排序的算法(冒泡排序、插入排序、选择排序、快速排序、归并排序)

    本博客主要围绕五种常见的排序算法展开讨论,包括选择排序、快速排序、归并排序、冒泡排序和插入排序。针对每种算法,我对其思想、特点、时间复杂度、稳定性以及优缺点进行了详细解释和比较。 冒泡排序算法是一种简单且常用的排序算法。它通过重复地交换相邻的元

    2024年02月13日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包