数组
- 一、数组
- 1.1数组的定义方法
- 1.2数组包括的数据类型
- 1.3获取数组的元素
- 1.4数组追加
- 1.5向函数传入数组的值
- 二、排序算法
- 2.1冒泡排序
- 2.2直接选择排序
- 2.3插入排序
- 2.4反转排序
一、数组
1.1数组的定义方法
格式
方法一:
数组名=(1 2 3 4 5)#把列表用小括号括起来即可
方法二:
数组名=([0]=1 [1]=2 [2]=3)#定义每个下标对应的数字或符号
方法三:
列表名="1 2 3 4 5"
数组名=($列表名)#定义一个列表,再用小括号括起来,即可
方法四:
数组名[0]="num1"
数组名[1]="num2"
数组名[2]="num3"
数组名[3]="num3"
#通过数组名加下标定义或者追加
1.2数组包括的数据类型
- 数值类型
- 字符类型(需要使用" "或者’ '定义)
1.3获取数组的元素
这里使用num做示例
num=(10 20 30 40 50)
用num定义一个数组
#获取所有元素的列表
${num[@]}
${num[*]} #$@与$*不加引号表现一致,加了”“$*则把所有元素列表当作一个整体
#获取所有元素的下标
${!sum[@]}
${!sum[*]}
#获取数组的元素个数/长度
${#sum[@]}
${#sum[*]}
#获取数组的某个元素值
${sum[下标]}
#删除数组某个元素
unset num[下标]
#删除数组
unset num
#数组切片,获取从数组的某个下表开的是少个元素
${num[@]:下标:长度}
#数组字符替换
${num[@]/旧字符/新字符}
1.4数组追加
方法一:
num[下标]=值 #可以在后面追加或者替换一个函数值
方法二:
num[${num[@]}]=值 #获取数组的长度,在后面追加一个值,如果数字值有空缺则,或替换一个函数
方法三:
num+=(1 2) #最方便,切不容易出错,直接在数组后面追加一个值
方法四:
num=("${num[@]}" "date" "arry") #与方法二类似,获取数组的长度,在后面追加数值,如果数值是字符串类型则需要用”“引起来,用”“号则最好使用$@
1.5向函数传入数组的值
格式
a() {
newar=($@)#通过$@获取调用函数后面跟的所有参数,组成新的数组
echo ${newar[@]} #输出这个数组
}
num=(11 22 33 44) #定义一个数组
arry(a ${num[@]}) #调用函数后面跟的参数为数组
a
二、排序算法
2.1冒泡排序
- 基本思想:冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
- 算法思路:冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。
2.2直接选择排序
- 外层循环控制循环的轮次,为数组的长度减一,内存循环取通过下标取第一个数与后面所有数做比较,如果大于则交换位置,对比和交换的次数随着排序的轮次减少而减少。
2.3插入排序
- 将等待排序的第一个元素与,已排好序的每一个元素做对比如果如果以排好序的元素大,则交换位置。
2.4反转排序
- 把数组的最后一个元素与第一个元素做交换,倒数第二个元素和第二个元素做替换,以此类推