数组及排序

一、数组的表示方法

  • 数值类型
  • 字符类型:用“ ”或’ '定义

1. 方法一:

数组名=(value0 value1 value2 ...)

2. 方法二:

数组名=([0]=value [1]=value [2]=value ...)

3. 方法三:

列表名="value0 value1 value2 ..."

4. 方法四:

数组名[0]="value"
数组名[1]="value"
数组名[2]="value"

在这里插入图片描述

二、获取数组相关信息

1. 获取数组长度

echo ${#数组名[@]}

2. 获取数组列表

echo ${数组名[@]}

在这里插入图片描述

3. 读取某个位置的数组

echo ${数组名[i]}        i代表数组中第i个数值,按照0、1、2 ...排序

在这里插入图片描述

三、对数组的操作

1. 数组遍历

在这里插入图片描述

$@$*的区别:不加""无区别,加""区别如下:

在这里插入图片描述

2. 数组切片

在这里插入图片描述

3. 数组替换

在这里插入图片描述

4. 数组删除

在这里插入图片描述

5. 数组追加元素

5.1 方法一

直接定义索引位置添加元素
在这里插入图片描述

扫描二维码关注公众号,回复: 12899519 查看本文章

5.2 方法二

在数组后面追加元素
1、只能追加一个元素
在这里插入图片描述
2、可追加多个元素
在这里插入图片描述
加" "时, ∗ 与 *与 @的区别
在这里插入图片描述

5.3 方法三

在这里插入图片描述

四、向函数传数组参数

#!/bin/bash
a(){
    
    
   echo "函数接收到的值为:$@"
   newarray=$@
   echo "新数组的值为:${newarray[@]}"
}
array=(10 20 30 40 50)
echo "arrary数组的值为:${array[@]}"
a ${array[@]}

在这里插入图片描述
在这里插入图片描述

五、从函数返回数组

#!/bin/bash
test1(){
    
    
newarray=(`echo $@`)
sum=0
for value in ${newarray[@]}
do
    sum=$[$sum + $value]
done
echo $sum
}
test2(){
    
    
newarray=(`echo $@`)
for ((i=0;i<=$[$# - 1];i++))
    do
    newarray[$i]=$[${newarray[$i]} * 2]
done
    echo ${newarray[@]}
}
array=(5 3 1 2 4)
echo "原数组值为:${array[@]}"
result1=`test1 ${
     
     array[@]}`
echo "新数组的和为:$result1"
result2=(`test2 ${
     
     array[@]}`)
echo "新数组值为:${result2[@]}"

在这里插入图片描述
在这里插入图片描述

六、数组排序

1. 冒泡排序

#!/bin/bash
read -p "输入需要排序的数组:" b
array=($b)
echo "旧数组为:${array[@]}"
#获取数组长度
length=${#array[@]}
for ((i=1;i<$length;i++))
do
    #确定数值位置,大的往后放,并且比较次数随着轮数增加而减少
    for ((a=0;a<$length-$i;a++))
    do
       #定义第一个和第二个比较的数值
       first=${array[$a]}
       second=${array[$a+1]}
       if [ $first -gt $second ];then
         #把第一个数值赋予给一个临时变量temp
         temp=${array[$a]}
         #把第二个数值赋予给第一个数值
         array[$a]=${array[$a+1]}
         #再把第一个数值的值(临时变量temp)赋予给第二个数值
         array[$a+1]=$temp
       fi
    done
done
echo "排序后的数组顺序为:${array[@]}"

在这里插入图片描述
在这里插入图片描述

2. 直接选择排序

#!/bin/bash
arr=(20 30 10 60 40 50)
echo "原数组的值为:${arr[@]}"
length=${#arr[@]}
#定义排序轮数
for ((a=1;a<$length;a++))
    do
    #假设索引为0的元素是最大的
    index=0
    #定义和第一个元素比较的索引,来确定最大的元素索引
    for ((b=1;b<=$length-$a;b++))
    do
        #定义最大的元素的值
        max=${arr[$index]}
        #定义从索引1开始比较的元素的值
        element=${arr[$b]}
        #判断如果从索引1开始比较的元素的值大于当前最大元素的值,就记录最大值的索引到index
        if [ $element -gt $max ];then
           index=$b
        fi
    done
    #定义每一轮比较的最后一个元素的索引
    last=$[$length-$a]
    #把当前轮次的最后一个元素的值赋给临时变量temp
    temp=${arr[$last]}
    #把最大的值赋给当前轮次的最后一个元素
    arr[$last]=${arr[$index]}
    #把temp里的原来最后一个元素的值赋给原最大值所在索引的元素
    arr[$index]=$temp
done
echo "排序后的数组为:${arr[@]}"

在这里插入图片描述
在这里插入图片描述

3. 反转显示

#!/bin/bash
arr=(1 2 3 4 5)
length=${#arr[@]}
for ((i=0;i<$length/2;i++))
do
  temp=${arr[$i]}
  arr[$i]=${arr[$length-$i-1]}
  arr[$length-$i-1]=$temp
done
echo ${arr[@]}

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Ryu_hayabusa/article/details/114677015