一、数组
1. 数组概述
数组是若干个数值的有序排列,其中的值被称为元素。每个元素都有一个对应的位置序号,这个位置序号被叫做是下标,数组的下标是从0开始的。
2. 数组语法
-
数组语法一
变量名=(值1 值2 值3) # 数组打印 echo ${变量名[*]} # 或者是@
-
数组语法二
变量名=([0]=值1 [1]=值2 [2]=值3)
3. 数组的常见使用
-
根据数组索引获取对应元素。
arr=(1 2 3 4 5) echo ${arr[0]} # 1
-
获取数组的长度。
arr=(1 2 3 4 5) echo ${#arr[*]} # 5
-
数组的遍历。
arr=(1 2 3 4 5) for i in ${arr[*]} do echo $i done
-
数组的切片。
arr=(1 2 3 4 5) # 变量名[*]:起始索引:步长 echo ${arr[*]:0:2} # 1 2
-
数组的元素替换。
arr=(1 2 3 4 5) # 临时替换 # 变量名[*]/原有值/新值 echo ${arr[*]/3/6} # 1 2 6 4 5 # 永久替换 # 需要重新赋值 arr=(${arr[*]/3/6})
-
数组的删除。
arr=(1 2 3 4 5) # 删除整个数组 unset arr # 删除数组中的某个元素 unset arr[1]
- 根据索引删除某个元素,只是将该索引对应的值删掉,索引对应的值变为空值;后面元素的索引并不会往前变动。
-
数组增加元素。
arr=(1 2 3 4 5) # 第一种 arr[5]=6 # 第二种 arr+=(值1 值2)
-
将数组作为参数传入函数。
func () { new_arr=($@) echo ${new_arr[*]} } arr=(1 2 3 4 5) func ${arr[*]}
二、冒泡排序
1. 冒泡排序概述
冒泡排序是指将数组内的元素安装从大到小(或者从小到大)的顺序进行排列。相邻的两个元素会比较大小,如果顺序错误,就会交互两个数字的位置;这个步骤会反复执行,直到没有需要交换位置的元素为止。
每遍历一次,最大或者最小的元素就会排到最后,然后剩下的元素再重新比较大小来排序,重复执行该过程,直到顺序排列正确。
每遍历排序一次,就有一个元素排序完成,因此有n个元素的数组,需要n-1次遍历;每次需要进行排序的元素个数也逐次减1。
2. 冒泡排序的具体实现
#! /bin/bash
arr=(40 50 31 5 10 98)
len=${#arr[*]}
for ((i=1;i<len;i++)) # 外循环控制遍历次数
do
for ((j=0;j<len-i;j++)) # 内循环控制数组的下标索引
do
k=$((j + 1))
first=${arr[$j]}
second=${arr[$k]}
if [ $first -lt $second ]
then
arr[$j]=$second
arr[$k]=$first
fi
done
done
echo ${arr[*]}