前言
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200824184708681.gif#pic_center
学写了shell之后,想写一些简单的脚本进行熟悉shell,下面使用shell脚本写的冒泡排序,希望能对你有所帮助。
下面是一组数组我们来分析一下
一:排序讲解
score=(75 89 57 97 67) 就是前面两个进行对比大小 值小放前面
第一轮
75 89 57 97 67 轮数定义为“i”
75 89 57 97 67 第一次 数组长度-1 第一轮比较后,最大以为值是97
75 57 89 97 67 第二次
75 57 89 97 67 第三次
75 57 89 67 97 第四次
------第二轮--------------------------------------------
75 57 89 67 | 97 97 数组长度-2 第一轮比较后,第二大是89
57 75 89 67 | 97 第一次
57 75 89 67 | 97 第二次
57 75 67 89 | 97 第三次
------第三轮-------------------------------------------
57 75 67 | 89 97
57 75 67 | 89 97 第一次 数组长度-3 第一轮比较后,第三大是75
57 67 75 | 89 97 第二次
----第四轮-----------------------------------------------
57 67 | 75 89 97
57 67 | 75 89 97 第一次 数组长度-4
有没有发现规律???
采用双层循环 外层为轮 内层为次数
定义轮数为“i"
次数为“j-i ”
小伙伴千万别给绕进去了,要找规律.
示例1:冒泡排序
#!/bin/bash
score=(75 89 57 97 67)
#外层为轮
for ((i=1;i<${#score[@]};i++));do
#内层为次
for ((j=0;j<${#score[@]}-i;j++));do
#两两交换
if [ ${score[$j]} -gt ${score[((j+1))]} ] ;then 'j为下标 第二个就是j+1'
tmp=${score[((j+1))]} '这边就是赋值'
score[((j+1))]=${score[$j]}
score[$j]=$tmp
fi
done
done
echo ${score[@]}
示例2:输入任意元素加入数组
#!/bin/bash
k=0
while true '当正确的时候'
do
read -p "是否加入元素:" GO
if [ $GO == "no" ];then '输入no就会退出来'
break
fi
read -p "请输入第$[$k+1]个元素:" shuai
score[$k]=$shuai
let k++
done
#外层为轮
for ((i=1;i<${#score[@]};i++));do
#内层为次
for ((j=0;j<${#score[@]}-i;j++));do
#两两交换
if [ ${score[$j]} -gt ${score[((j+1))]} ] ;then
tmp=${score[((j+1))]}
score[((j+1))]=${score[$j]}
score[$j]=$tmp
fi
done
done
echo ${score[@]}
[root@hua ~]# sh maopao.sh
是否加入元素:yes
请输入第1个元素:45
是否加入元素:yes
请输入第2个元素:78
是否加入元素:yes
请输入第3个元素:56
是否加入元素:yes
请输入第4个元素:37
是否加入元素:no
37 45 56 78!