当前位置:网站首页>数组、冒泡的认识
数组、冒泡的认识
2022-07-17 00:16:00 【世上无难事754】
文章目录
一数组
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
[[email protected] ~]# echo ${num[*]} ##显示详细字符串(数组)内容,#号换@也可以效果一样
11 22 33 44
[[email protected] ~]# echo ${#num[*]} ##显示所有字符串(数组)长度,#号换@也可以效果一样
4
第二种:
精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续
数组名=([0]=value [1]=value [2]value ...)
num=([0]=55 [1]=66 [2]77 [4]88)
[[email protected] ~]# echo ${num[*]}
[0]55 [1]66 [2]77 [3]88
第三种:
先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组
列表名="value0 value1 value2...."
数组名=($列表名)
list="11 12 13 14"
num=($list)
[[email protected] ~]# echo ${num[*]}
11 12 13 14
[[email protected] ~]# echo ${#num[*]}
4
第四种:
根据下标定义
数组名[0]="11"
数组名[0]="22"
数组名[0]="33"
数组名[0]="value"
数组名[0]="value"
数组名[0]="value"
1.3数组包括的数据类型
数值类型
字符类型:使用 " " 或 ’ ’ 定义
1.获取数组长度
num=(11 22 33 44)
[[email protected] ~]# echo ${#num[*]} ##显示所有字符串(数组)长度,#号换@也可以效果一样
4
[[email protected] ~]# echo ${#num[@]}
4
2.获取数据列表
num=(11 22 33 44)
[[email protected] ~]# echo ${num[*]} ##显示详细字符串(数组)内容,#号换@也可以效果一样
11 22 33 44
[[email protected] ~]# echo ${#num[@]}
11 22 33 44
3.数组元素遍历
#!/bin/bsah
arr=(1 2 3 4 5)
for i in ${arr[*]}
do
echo $i
done
[[email protected] ~]# sh 4.sh
1
2
3
4
5
4.元素切片
[[email protected] ~]# ky20-zy=(4 7 9 5 2) ##定义数组
[[email protected] ~]# echo ${ky20-zy[*]} ##输出数组里的元素
4 7 9 5 2
0 1 2 3 4 ##索引下标
[[email protected] ~]# echo ${ky20-zy[*]:2:3} ##提取从索引下标2开始的3个元素
9 5 2
[[email protected] ~]# echo ${ky20-zy[*]:2:2} ##提取从索引下标2开始的2个元素
9 5
[[email protected] ~]# echo ${ky20-zy[*]:3:2} ##提取从索引下标3开始的2个元素
5 2
[[email protected] ~]# echo ${ky20-zy[*]:1:2} ##提取从索引下标1开始的2个元素
7 9
5.数组元素替换
[[email protected] ~]# mqj=(36 35 34 33 32 31) ##定义数组
[[email protected] ~]# echo ${mqj[*]} ##输出数组里的元素
36 35 34 33 32 31
[[email protected] ~]# echo ${mqj[*]/3/55} ##将有3的元素替换或增加一个指定的数值55,只是覆盖,不是永久替换(仅替换每个元素的第一个匹配项)
556 555 554 553 552 551
6.数组删除
[[email protected] ~]# jmq=(34 45 55 12)
[[email protected] ~]# echo ${jmq[*]}
34 45 55 12
[[email protected] ~]# unset jmq ##删除数组
[[email protected] ~]# echo ${jmq[*]}
[[email protected] ~]# jmq=(34 45 55 12)
[[email protected] ~]# echo ${jmq[*]}
34 45 55 12
[[email protected] ~]# unset jmq[3] ##删除第四元素,中括号里的是索引下标,删除后只是不显示元素而已,但会变为空格占用索引下标,如果查看长度的话会减少
[[email protected] ~]# echo ${jmq[*]}
34 45 55
1.例:以数组的方式定义随机点名
[[email protected] opt]# vim w ##创建编辑一个文件写入名字和对应编号
1大狮子
2小兔子
3小海豚
4花蝴蝶
5小家雀
[[email protected] opt]# vim w.sh ##编写数组脚本
#!/bin/bash
bu=`cat /opt/w` ##定义变量
arr=($bu) ##定义数组变量
for i in ${arr[*]} ##循环查看里的内容数组
do
a=$[$RANDOM%5] ##定义变量取随机数
done
echo "小动物的编号和名字是: ${arr[$a]}" ##输出随机数对应的编号和名字
[[email protected] 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
dxz=$a ##增加自定义变量dxz的目的,是为了让a自定义变量的赋值空闲出来,后续好调换
a=$b
b=$dxz
##dxz=$a
dxz=10
a=10
b=20
##a=$b
dxz=10
a=20
b=20
##b=$a
dxz=10
a=20
b=10
a=20
b=10
##冒泡排序元素调换
dxz=(10 20)
echo ${dxz[*]}
##交换位置
xtz=`echo ${dxz[0]}`
dxz[0]=`echo ${dxz[1]}`
dxz[1]=$xtz
echo ${dxz[*]}
[[email protected] ~]# sh 7.sh
10 20
20 10
##a=$b
dxz=10
a=20
b=20
##b=$a
dxz=10
a=20
b=10
a=20
b=10
##冒泡排序元素调换
dxz=(10 20)
echo ${dxz[*]}
##交换位置
xtz=echo ${dxz[0]}
dxz[0]=echo ${dxz[1]}
dxz[1]=$xtz
echo ${dxz[*]}
[[email protected] ~]# sh 7.sh
10 20
20 10

边栏推荐
- 30分钟搞懂 HTTP 缓存
- Jmeter接口测试之响应断言
- BeanShell脚本获取当前时间
- Metersphere is based on JMeter distributed performance pressure testing platform
- Understand HTTP cache in 30 minutes
- [unity Editor Extension] unity makes its own exclusive editor panel
- 【瑞吉外卖⑩】Linux 粗略学习 & Redis 粗略学习
- innodb、Mysql结构、三种删除的区别
- BeanShell script gets the current time
- 使用Grafana8.5.2显示zabbix6.0的信息
猜你喜欢

How to use nmon

Static routing (detailed)

网络层协议和IP数据包的格式(详解)

Leetcode buckle classic question - 42 Connect rainwater

Zabbix6.0通过iDRAC,IMM2监控DELL,IBM服务器硬件

Firewalld 防火墙

innodb、Mysql结构、三种删除的区别

VLAN and trunk port configuration

Full link voltage measurement

Decentralized edge rendering meta universe protocol cadeus was invited to attend the cbaia 2022 summit to enable more Web3 application scenarios with technology
随机推荐
Uniapp wechat applet login (authorize wechat first and then mobile phone number) - (1)
Use JMeter to test services based on websocket protocol
Understanding: what is interface and the concept of interface
登录功能的测试点大全
Logical vulnerability - authentication vulnerability
Unity notes 1
[unity development tips] unity mixer mixer controls global volume
Sword finger offer 53 - I. find the number I in the sorted array
Uni app wechat applet ordering system [another order] page Jump
剑指 Offer 53 - I. 在排序数组中查找数字 I
This article only commemorates the modulus of negative numbers
Longest ascending subsequence - Optimization
Shell脚本for、while循环语句、猜价格小游戏
[Ruiji takeout ⑩] rough learning of Linux & rough learning of redis
JMeter response time test component & multi interface concurrency
status 500 reading AftersaleService#getAftersaleList(Long)+com. sun. proxy.$ Proxy214.getAftersaleList
Performance traffic playback
性能瓶颈定位XMind
D - parity game discretization + weighted union search set
SSH远程控制与访问