冒泡排序之shell脚本实现


前言

学写了shell之后,想写一些简单的脚本进行熟悉shell,下面使用shell脚本写的冒泡排序,希望能对你有所帮助。

下面是一组数组我们来分析一下

mark

一:排序讲解

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

今天得知识点,你get到了吗?

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值