目录
基本思想:冒泡排序的基本思想是对比邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
算法思路:冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数的减少而减少。

- #!/bin/bash
- array=(60 20 30 50 10 40)
- echo "原数组参数顺序为:${array[*]}"
- for ((i=1;i<${#array[*]};i++))
- do
- for ((a=0;a<${#array[*]}-i;a++))
- do
- if [ ${array[$a]} -gt ${array[$a+1]} ]
- then
- temp=${array[$a]}
- array[$a]=${array[$a+1]}
- array[$a+1]=$temp
- fi
- done
- done
- echo "经过冒泡排序后,数组顺序为:${array[*]}"

基本思想:将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。
算法思路:index记录最大元素的下标,啊记录当前轮数的最后一个比较元素的下标。外循环控制比较轮数,内循环用于指定当前轮数的最后一个比较轮数(找最大的元素下标的范围)

- #!/bin/bash
- arr=(63 4 24 1 3 15)
- echo "老数组的顺序为:${arr[@]}"
- length=${#arr[@]}
-
- #定义比较的轮数,还是数组长度减1
- for ((a=1; a<length; a++ ))
- do
- #定义当前比较轮中拥有最大值的元素下标的初始值为0
- index=0
- #定义当前比较轮的除了第一个元素的其他比较元素的下标的范围,会随着比较轮数的增加而减少,从1开始
- for ((b=1; b<=length-a; b++ ))
- do
- #获取其他比较元素的值
- OTHER=${arr[$b]}
- #获取当前比较轮中最大元素的值
- MAX=${arr[$index]}
- #通过拿其他比较元素的值与最大元素的值比较,获取当前比较轮的最大元素的下标
- if [ $OTHER -gt $MAX ];then
- index=$b
- fi
- done
-
- #拿当前比较轮的最大元素的值与当前比较轮最后一个元素的值进行交换
- #获取当前比较轮的最后一个元素的下标
- last=$[$length - $a]
- #使用临时变量temp,获取当前最后一个元素的值
- temp=${arr[$last]}
- #把当前轮最大的元素的值赋给最后一个元素
- arr[$last]=${arr[$index]}
- #把原来最后一个元素的值赋给原最大的元素
- arr[$index]=$temp
-
- done
-
- echo "排序后的宿主顺序为:${arr[@]} "
-
- [root@localhost ~]# bash test1.sh
- 老数组的顺序为:63 4 24 1 3 15
- 排序后的宿主顺序为:1 3 4 15 24 63

基本思想:把数组最后一个元素与第一个元素替换,倒数第二个元素与第二个元素替换,以此类推,直到把所有数组元素反转替换。
- #!/bin/bash
-
- arr=(10 20 30 40 50 60)
- echo "排序前的数组顺序为:${arr[@]}"
- length=${#arr[@]}
- #拿折半的前几个数作为参照物
- for ((a=0; a
2; a++)) - do
- #获取折半前面的数值
- front=${arr[$a]}
- #获取折半后面的数值
- backend=${arr[$length-1-$a]}
- #前后值进行交换
- temp=$front
- arr[$a]=$backend
- arr[$length-1-$a]=$temp
- done
-
- echo "排序后的数组顺序为:${arr[@]}"


- #!/bin/bash
- arr=(63 4 24 1 3 15)
- echo "排序前的数组顺序为:${arr[@]}"
- length=${#arr[@]}
-
- #定义需要排序的元素范围,从第二个元素开始与第一个元素比较
-
-
相关阅读:
基于php+thinkphp的网上书店购物商城系统
【Spring】Spring 事务和事务传播机制
C++断言让程序有了脾气
Spring Boot + Vue的网上商城之商品信息展示
第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析-2 ascp kingfisher数据下载ena
康威定律对于系统架构很重要吗?
掌握 Android 自动化测试框架 UiAutomator & UiAutomator2
[go学习笔记.第十四章.协程和管道] 1.协程的引入,调度模型以及运行cpu数目,协程资源竞争问题
Linux下基于HTTP网页视频监控
线性同余方程(扩展欧几里得acwing878)
-
原文地址:https://blog.csdn.net/shitianyu6/article/details/126663974