shell小实验详解4——经典冒泡排序+简略数组基础


:给出一个数组array=(8 5 3 2 1 6 7),将数组内的元素进行升序排序,然后生成一个新的数组输出。

经典冒泡排序法

分析:将数组内的这串数字进行从小到大的排序,这里用到一个冒泡的思想,每一轮两两进行对比,把较大的数往后传,一轮下来,最大的数放在末尾,然后进行第二轮,除了最后一位,进行两两比对,把最大的往后换,最后得出来的就是整体第二大的,7个数字一共进行6轮比较,每轮内比较的次数随轮数递减。
代码如下:

#!/bin/bash
array=(8 5 3 2 1 6 7)									//数组
echo "原数据为${array[*]}"
for ((i=1; i<${#array[*]}; i++))						//总共比较的轮数,数组长度-1
do
 for ((j=0; j<${#array[*]}-i; j++))						//每一轮两两比对的次数,随比较的轮数减少
  do
    if [ ${array[$j]} -gt ${array[$[$j+1]]} ];then 		//如果前面的数比后面的数大,就把前面的数换到后面
    t=${array[$j]}										//先把前面的数赋值给参数t
    array[$j]=${array[$[$j+1]]}							//然后把后面的数赋值给前面
    array[$[$j+1]]=$t									//在把t重新赋值给后面,完成交换
    fi
  done
done
echo "排序后为${array[*]}"									    //输出新的数组

结果:
在这里插入图片描述

数组基础

数组的定义

共有以下四种定义
1.数组名=(value0 value1 value2…)

[root@host ~]# A=(1 2 3 4 5)			//数组定义		
[root@host ~]# echo ${A[@]}				//输出整个数组
1 2 3 4 5

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

[root@host ~]# B=([0]=1 [1]=2 [2]=3)
[root@host ~]# echo ${B[@]}
1 2 3

3.列表名=“value0 value1 value2…”
数组名=($列表名)

[root@host ~]# list="1 2 3 4"
[root@host ~]# C=($list)
[root@host ~]# echo ${C[@]}
1 2 3 4

4.数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”

[root@host ~]# D[0]="1"
[root@host ~]# D[1]="2"
[root@host ~]# D[2]="3"
[root@host ~]# echo ${D[@]}
1 2 3

数组的使用方法

获取数组长度

@和*在这里使用是一样的,表示全部

[root@host ~]# A_length=${#A[@]}
[root@host ~]# echo $A_length
5
[root@host ~]# A_length=${#A[*]}
[root@host ~]# echo $A_length
5

读取某下标赋值

[root@host ~]# echo ${A[@]}
1 2 3 4 5
[root@host ~]# echo ${A[0]}
1
[root@host ~]# echo ${A[1]}
2
[root@host ~]# echo ${A[2]}
3
[root@host ~]# echo ${A[3]}
4
[root@host ~]# echo ${A[4]}
5

数组遍历

使用for循环,将数组元素一个个输出

[root@host ~]# vim A.sh
#!/bin/bash
A=(1 2 3 4 5)
for v in ${A[@]}
do
  echo $v
done
[root@host ~]# ./A.sh 
1
2
3
4
5

数组切片

数组切片后,返回的是以空格为间隔的字符串

[root@host ~]# echo ${A[@]}
1 2 3 4 5
[root@host ~]# echo ${A[@]:0:2}		//:起始位置:长度
1 2
[root@host ~]# echo ${A[@]:2:3}
3 4 5

数组替换

[root@host ~]# echo ${A[@]}
1 2 3 4 5
[root@host ~]# echo ${A[@]/3/666} 		//   /查找字符/替换字符
1 2 666 4 5
[root@host ~]# echo ${A[@]}			   //直接输出不会替换原数组
1 2 3 4 5
[root@host ~]# A=(${A[@]/3/666})    	//要重新赋值
[root@host ~]# echo ${A[@]}				//数组才会变
1 2 666 4 5

数组删除

[root@host ~]# echo ${A[@]}
1 2 666 4 5
[root@host ~]# unset A[2]			//删除第几个数组元素,从0开始,[2]就是第三个
[root@host ~]# echo ${A[@]}        
1 2 4 5
[root@host ~]# unset A				//删除整个数组
[root@host ~]# echo ${A[@]}

猜你喜欢

转载自blog.csdn.net/m0_47452405/article/details/108245807