数组、冒泡的认识

一数组

1.1数组的定义

  • 数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用
  • 数组的类型

普通数组:不需要声明直接定义,下标索引只能是整数
关联数组:需要用declare -A 声明否则系统不识别,索引可以是字符串

1.2数组的定方式

A="1 2 3 456"       //定义字符串
A=(1 2 3 4 456)		//定义数组(里面的每个数字又被称为元素)
   0 1 2 3 4		//其下标示,0为起始(又称数组下标,索引下标)

第一种:

直接把要加入数组的元素用小括号括起来,中间用空格分开

数组名=(value0 value1 value2)

num=(11 22 33 44)
echo ${#num}     ##显示单个字符串长度
2
[root@ky20-zy ~]#  echo ${num[*]}  ##显示详细字符串(数组)内容,#号换@也可以效果一样
11 22 33 44
[root@ky20-zy ~]# echo ${#num[*]}    ##显示所有字符串(数组)长度,#号换@也可以效果一样
4
第二种:

精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续

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

num=([0]=55 [1]=66 [2]77 [4]88)

[root@ky20-zy ~]#  echo ${num[*]}
[0]55 [1]66 [2]77 [3]88
第三种:

先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组

列表名="value0 value1 value2...."
数组名=($列表名)

list="11 12 13 14"
num=($list)
[root@ky20-zy ~]# echo ${num[*]}
11 12 13 14 
[root@ky20-zy ~]# echo ${#num[*]}
4
第四种:

根据下标定义

数组名[0]="11"
数组名[0]="22"
数组名[0]="33"

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

1.3数组包括的数据类型

  • 数值类型

  • 字符类型:使用 " " 或 ’ ’ 定义

1.获取数组长度
num=(11 22 33 44)
[root@ky20-zy ~]# echo ${#num[*]}    ##显示所有字符串(数组)长度,#号换@也可以效果一样
4
[root@ky20-zy ~]# echo ${#num[@]}
4
2.获取数据列表
num=(11 22 33 44)
[root@ky20-zy ~]#  echo ${num[*]}  ##显示详细字符串(数组)内容,#号换@也可以效果一样
11 22 33 44
[root@ky20-zy ~]# echo ${#num[@]}
11 22 33 44
3.数组元素遍历
#!/bin/bsah
arr=(1 2 3 4 5)
for i in ${arr[*]}   
do
echo $i
done
[root@ky20-zy ~]# sh 4.sh
1
2
3
4
5
4.元素切片
[root@ky20-zy ~]# ky20-zy=(4 7 9 5 2)  ##定义数组
[root@ky20-zy ~]# echo ${ky20-zy[*]}   ##输出数组里的元素
4 7 9 5 2
0 1 2 3 4    ##索引下标
[root@ky20-zy ~]# echo ${ky20-zy[*]:2:3}  ##提取从索引下标2开始的3个元素
9 5 2
[root@ky20-zy ~]# echo ${ky20-zy[*]:2:2}  ##提取从索引下标2开始的2个元素
9 5
[root@ky20-zy ~]# echo ${ky20-zy[*]:3:2}  ##提取从索引下标3开始的2个元素
5 2
[root@ky20-zy ~]# echo ${ky20-zy[*]:1:2}  ##提取从索引下标1开始的2个元素
7 9
5.数组元素替换
[root@ky20-zy ~]# mqj=(36 35 34 33 32 31)  ##定义数组
[root@ky20-zy ~]# echo ${mqj[*]}           ##输出数组里的元素
36 35 34 33 32 31
[root@ky20-zy ~]# echo ${mqj[*]/3/55}      ##将有3的元素替换或增加一个指定的数值55,只是覆盖,不是永久替换(仅替换每个元素的第一个匹配项)
556 555 554 553 552 551

6.数组删除
[root@ky20-zy ~]# jmq=(34 45 55 12)
[root@ky20-zy ~]# echo ${jmq[*]}
34 45 55 12
[root@ky20-zy ~]# unset jmq       ##删除数组
[root@ky20-zy ~]# echo ${jmq[*]}

[root@ky20-zy ~]# jmq=(34 45 55 12)
[root@ky20-zy ~]# echo ${jmq[*]}
34 45 55 12
[root@ky20-zy ~]# unset jmq[3]   ##删除第四元素,中括号里的是索引下标,删除后只是不显示元素而已,但会变为空格占用索引下标,如果查看长度的话会减少
[root@ky20-zy ~]# echo ${jmq[*]}
34 45 55 

1.例:以数组的方式定义随机点名
[root@ky20-zy opt]# vim w   ##创建编辑一个文件写入名字和对应编号
1大狮子
2小兔子
3小海豚
4花蝴蝶
5小家雀

[root@ky20-zy opt]# vim w.sh  ##编写数组脚本
#!/bin/bash
bu=`cat /opt/w`        ##定义变量
arr=($bu)             ##定义数组变量
for i in ${arr[*]}    ##循环查看里的内容数组
do
a=$[$RANDOM%5]       ##定义变量取随机数
done
echo "小动物的编号和名字是: ${arr[$a]}"   ##输出随机数对应的编号和名字

[root@ky20-zy opt]# sh w.sh
小动物的编号和名字是: 1大狮子

简单方法
#!/bin/bash
bu=`cat /opt/w`
arr=($bu)
a=$[$RANDOM%5]
echo "小动物的编号和名字是: ${arr[$a]}"

二、数组排序算法(冒泡排序)

类似气泡上涌的动作,将会数据在数组中从小到大或者从大到小不断断向前移动

  • 基本思想

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部

  • 算法思路

冒泡算法由两层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组就已经完成排序了

而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少

  • 例:希望a和b的值对调位置
a=10
b=20

ky20-zy=$a
a=$b
b=$ky20-zy

a=20
b=10

冒泡算法由两层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组就已经完成排序了

而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置对比和交换次数随排序轮数而减少

  • 例:希望a和b的值对调位置
a=10
b=20

ky20-zy=$a
a=$b
b=$ky20-zy

a=20
b=10
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值