Shell之冒泡排序法(通俗易懂呦!)

  今天给大家介绍一个shell当中的冒泡排序,下面是一个简单的概念图,帮助大家理解
在这里插入图片描述
简单来说就是从左往右,两两比较,将数值最大的赋给右边,采用双层循环,外层为轮,内层为次数。定义轮数为“i" ,次数为“j-i ”
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

1:冒泡排序

#!/bin/bash
score=(55 23 45 32)
for ((i=1;i<${
    
    #score[*]};i++))       #${
    
    #score[*]}为数组的元素的个数
do
 for ((j=0;j<${
    
    #score[*]}-$i;j++))   #${
    
    #score[*]}为数组的元素的个数
 do
     if [ ${
    
    score[$j]} -gt ${
    
    score[((j+1))]} ] 
     then
      temp=${
    
    score[j+1]}
         score[((j+1))]=${
    
    score[$j]}
         score[$j]=$temp
fi
done
done
echo ${
    
    score[*]}
[root@server1 ~]# sh maopao.sh
23 32 45 55

2:输入任意元素加入数组,进行冒泡排序

#!/bin/bash
k=0
while true
do
read -p "是否需要输入数值[yes/no]:" do
  if [ $do == "no" ]    #输入no,即可退出,输入其他继续循环
  then break
  fi
read -p "请输入第$(($k+1))个元素:" key
score[$k]=$key
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
      temp=${
    
    score[j+1]}
         score[((j+1))]=${
    
    score[$j]}
         score[$j]=$temp
      fi
   done
done
echo ${
    
    score[*]}
[root@server1 ~]# sh maopao.sh
是否需要输入数值[yes/no]:yes
请输入第1个元素:44
是否需要输入数值[yes/no]:yes
请输入第2个元素:33
是否需要输入数值[yes/no]:yes
请输入第3个元素:55
是否需要输入数值[yes/no]:yse
请输入第4个元素:12   
是否需要输入数值[yes/no]:no
12 33 44 55

小伙伴们有任何问题可以私信我呦!!

猜你喜欢

转载自blog.csdn.net/qyf158236/article/details/108798190