0
点赞
收藏
分享

微信扫一扫

数组的用法与冒泡排序

跟着Damon写代码 2022-04-16 阅读 23

目录


数组的运用

一、shell数组的定义

  • 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
  • 数组元素的下标由 0 开始。
  • Shell 数组用括号来表示,元素用"空格"符号分割开
  • 在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
  • 二、定义属组的方法

  • 方法一:
  • 数组名=(value1 value2 ... valuen)
    [root@txp data]#a=(1 2 3 4 5)
    [root@txp data]#echo ${a[@]}
    1 2 3 4 5
    
  • 方法二:
  • 数组名=([0]=value0 [1]=value0 [2]=value0 ...)
    [root@txp otp]#b=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5)
    [root@txp otp]#echo ${b[@]}
    1 2 3 4 5
    
  • 方法三:
  • 数组名[0]="value"
    数组名[1]="value"
    数组名[2]="value
    [root@txp data]#c[0]=1
    [root@txp data]#c[1]=2
    [root@txp data]#c[3]=3
    [root@txp data]#c[4]=4
    [root@txp data]#echo ${c[@]}
    1 2 3 4
    

    三、数组的数据类型

    1.数值类型

    2.字符类型:使用" "或’ '定义

    #数组可以是数值型
    [root@txp ~]#a=(1 2 3 4 5);echo ${a[@]}
    1 2 3 4 5
     
    #数组可以是混合型
    [root@txp ~]#a=(a 1 2 apple);echo ${a[@]}
    a 1 2 apple
    

    四、数组的基本用法

    1.获取数组列表

    echo ${数组名[*]}
    echo ${数组名[@]}
    

    在这里插入图片描述

    2.获取数组长度

    echo ${#数组名[*]} 
    echo ${#数组名[@]} 
    

    在这里插入图片描述

    3.读取某下标赋值

    数组名=(元素0  元素1  元素2  ……)			##	定义数组
    echo ${数组名[索引值]}						##	输出数组索引值对应的元素,索引值为从0开始
    

    在这里插入图片描述

    五、数组的常用操作

    1.数组的遍历

    #!/bin/bash
    a=(1 2 3 4 5 6)
    for i in ${a[@]}
    do
       echo $i
    done
    

    在这里插入图片描述

    2.数组切片

    a=(0 1 2 3 4 5 6 7 8)
    echo "输出整个数组: " ${a[@]}
    echo "取出数组1到3: " ${a[@]:1:3}
    echo "取出数组5到后面所有的元素: " ${a[@]:5:5}
    

    在这里插入图片描述

    3.数组替换

    1.临时替换

    #临时替换
    [root@txp data]#echo ${a[@]/4/6} 
     
    #重新赋值,可以永久修改
    [root@txp data]#a=(${a[@]/4/7})
    

    在这里插入图片描述
    2.永久替换

    [root@localhost data]# a=(1 2 3 4 5)
    [root@localhost data]# a=${a[@]/1/66}
    [root@localhost data]# a=($a)
    [root@localhost data]# echo ${a[@]}
    66 2 3 4 5
    

    在这里插入图片描述

    4.数组删除和指定下标的值删除

    格式:
    unset 数组名[数组下标]
    
    [root@localhost data]# echo ${a[@]}
    1 2 3 4
    [root@localhost data]# unset a[2]
    [root@localhost data]# echo ${a[@]}
    1 2 4
    [root@localhost data]# 
    
    

    在这里插入图片描述

    5.数组追加元素

    方法1:
    直接使用下标进行元素的追加

    数组名[下标]=变量
    

    在这里插入图片描述
    方法2:
    将数组的长度作为下标进行追加元素

    数组名[${数组名[@]}]=变量名
    

    在这里插入图片描述

    方法3:
    使用+=进行追加
    批量添加

    数组名+=(变量1 变量2 ...)
    

    在这里插入图片描述

    6.查看所有数组—declare -a

    在这里插入图片描述

    六、向函数传数组参数

    #!/bin/bash
    
    test (){
            newarr=($@)
            echo $1 $2 $3 $4 $5
            echo "新的数组值为:${newarr[*]}"
    }
            arr=(8 1 22 31 7)
            echo "原始数组的值为:${arr[*]}"
            test ${arr[*]}
    
    

    在这里插入图片描述

    七、冒泡排序

    在这里插入图片描述

  • 类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
  • 基本思想:
    冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
  • 算法思路:
    冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。
  • #!/bin/bash
    #写个冒泡排序算法的函数,通过函数可以对任何乱序的数组进行排序
    
    myarr() {
      newnum=($@)             ## 将外面的数组传进函数
      length=${#newnum[@]}    ## 数组的长度
      ##使用冒泡排序
      for ((i=1; i<$length; i++))  ##定义比较的轮数:数组长度减1,从1开始
      do
      ## 比较相邻元素,较大的值往右移
        for ((j=0; j<$length-i; j++))
        do
          ## 定义左边元素的值
          left=${newnum[$j]}
          ## 定义右边元素的值
          k=$[$j + 1 ]
          right=${newnum[$k]}
          ##比较左右两边元素的值,如果左边大于右边,两个元素互换位置
          if [ $left -gt $right ];then
            temp=$left
            newnum[$j]=$right
            newnum[$k]=$temp
          fi
        done
      done
      echo "排序后数组各元素的顺序为:${newnum[@]}"    
    }
    
    ################### main ######################
    
    read -p "请定义一个数组的值,每个值用空格分开:" num
    
    echo "原数组排序前各元素顺序为:${num[@]}"
    
    myarr ${num[@]}
    

    在这里插入图片描述


举报

相关推荐

0 条评论