秒懂的shell编程数组与冒泡算法排序详解
shell编程数组与冒泡算法排序详解
- 一、数组的四种表达方式
- 二 、数组的增删改查操作
- 三 、数组传参
- 3.1 主程序向函数传数组参数
- 3.2 从函数返回数组到主程序
- 四 、冒泡算法排序
一、数组的四种表达方式
方法1:
数组名=(value0 value1 value2 …)
方法2:
数组名=([0]=value [1]=value [2]=value)
方法3:
列表名=“value0 value1 value2 …”
数组名=($列表名)
方法4:
数组名[0]=“value”
数组名[1]=“value”
数组名[2]=“value”
……
二 、数组的增删改查操作
获取数组的长度
arr_length=${#arr_number[*]}
数组切片
[root@localhost ~]# a=(1 2 3 4 5)
[root@localhost ~]# echo ${a[*]} //输出整个数组
1 2 3 4 5
[root@localhost ~]# echo ${a[@]:0:2} #${数组名[@或*]:起始位置:长度]
1 2
[root@localhost ~]# echo ${a[@]:2:3}
3 4 5
注意:将数组切片之后,返回的是字符串,以空格作为分隔符
数组替换
arr=(1 2 3 4 5)
echo ${arr[@]/4/66} //${数组名[@或*]/查找字符/替换字符}
1 2 3 66 5
echo ${arr[@]} //并不会替换数组原有内容
1 2 3 4 5
a=(${arr[@]/4/66}) //要实现改变原有数组,可通过重新赋值实现
echo ${arr[*]}
1 2 3 66 5
删除数组
[root@localhost ~]# arr=(1 2 3 4 5)
[root@localhost ~]# unset arr //删除整个数组[root@localhost ~]# unset arr[2] //删除第三个元素
[root@localhost ~]# echo ${arr[*]}
1 2 4 5
数组添加元素
方法1 array_name[index]=value
方法2 array_name[${#array_name[@]}]=value
方法3 array_name=("${array_name[@]}" value1 ... valueN)
方法4 array_name+=(value1 value 2 ... valueN)
注意:
"${array_name[@]}"中双引号不能省略,否则当数组array_name中出现包含
空格的元素时会按空格将元素拆分成多个
不能把@替换成*,否则在加双引号时会把数组array_name中的所有元素作为一个元素添加到数组中
三 、数组传参
3.1 主程序向函数传数组参数
在函数中调用数组的时候可能会出现下面的问题
#!/bin/bash
test1() {echo "函数接收到的列表为:$@"
newarray=$1
echo ${newarray[*]}
}
array=(3 2 1 4 5)
echo "原始的数组值为${array[*]}"
test1 $array
运行结果如下图所示
此时需要将数组变量的值分解成单个的值,然后把这些值作为函数参数使用。在函数内部,再将所有的参数重新组合成一个新的数组变量。
演示代码如下:
#!/bin/bash
test2() {newarray=($(echo $@)) //$@会把接收到的所有的位置参数都表示出来,并且分割成单个元素。此处也可以写成newarray=($@)
echo "新数组的值为:${newarray[*]}"
}
array=(3 2 1 4 5)
echo "原始的数组值为${array[*]}"
test2 ${array[*]} //此处{}必加,表示把这个数组看作一个整体
运行结果如下
3.2 从函数返回数组到主程序
test3() {newarray=(`echo $@`)
for((i=0;i<$#;i++))
{newarray[$i]=$[${newarray[$i]}*2]
}
echo ${newarray[*]}
}array=(3 2 1 4 5)
result=($(test3 ${array[*]}))
echo "新数组的值为:${result[*]}"
四 、冒泡算法排序
冒泡排序
类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。
基本思想:
冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。
算法思路
冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置。
代码实现
#!/bin/bash
paixu() {array=($1)
for ((i=1;i<${#array[*]};i++)) ##比较轮数为数组长度减1,从1开始
dofor ((j=0;j<${#array[*]}-i;j++)) ##比较相邻两个元素,较大的数往后放,比较次数随比较比较轮数而减少doif [ ${array[$j]} -gt ${array[$[$j+1]]} ] ##如果第一个元素比第二个元素大就互换thentemp=${array[$j]} ##把第一个元素值保存在临时变量中array[$j]=${array[$[$j+1]]} ##把第二个元素值保存到第一个元素中array[$[$j+1]]=$temp ##把临时变量(也就是第一个元素原值),保存到第二个元素中fidone
done
echo ${array[*]}
}
#主体代码
f=$(cat $1)
paixu $f
运行结果如下
秒懂的shell编程数组与冒泡算法排序详解相关推荐
- shell编程数组与冒泡算法排序详解
shell编程数组与冒泡算法排序详解 一 数组的四种表达方式 二 数组的增删改查操作 三 数组传参 3.1 主程序向函数传数组参数 3.2 从函数返回数组到主程序 四 冒泡算法排序 一 数组的四种表达 ...
- 粒子群优化算法和python代码_Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- linux shell编程if语句内判断参数详解【ZT】
shell 编程中使用到得if语句内判断参数 –b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目 ...
- Linux从入门到精通系列之SHELL编程循环语句语法及实例详解(forwhileuntil)
前言 Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能.我们今天就来认识for.while.case语句的具体应用. 插个小广告吧,虽然我 ...
- Python编程实现粒子群算法(PSO)详解
1 原理 粒子群算法是群智能一种,是基于对鸟群觅食行为的研究和模拟而来的.假设在鸟群觅食范围,只在一个地方有食物,所有鸟儿看不到食物(不知道食物的具体位置),但是能闻到食物的味道(能知道食物距离自己位 ...
- shell脚本编程神器之awk语法案例详解
AWK入门指南 文章目录 shell脚本编程神器之awk语法案例详解 安装AWK AWK 起步示例 AWK程序的结构 执行 awk 程序 awk 的错误提示 简单输出 打印每一行 打印特定行 NF,字 ...
- 希尔排序基础java代码_java 算法之希尔排序详解及实现代码
摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...
- DES加解密算法原理详解与实现
[DES密码编写] 1. Equipment (1) operating system version :WIN 10 (2) CPU instruction set: x 64 (3) softwa ...
- 算法:详解布隆过滤器的原理、使用场景和注意事项@知乎.Young Chen
算法:详解布隆过滤器的原理.使用场景和注意事项@知乎.Young Chen 什么是布隆过滤器 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data struc ...
最新文章
- Pytest - 使用介绍
- 深入理解 KVC\KVO 实现机制 — KVC
- rnn神经网络模型_一文读懂序列建模(deeplearning.ai)之循环神经网络(RNNs)
- potplayer 多个进程_操作系统 | 进程同步与进程互斥
- 大型网站首页执行时间0.3秒,性能算好还是算坏?
- Python(8)_初学Python
- Ubuntu18.04解决sudo执行慢的问题
- Python--day46--mysql触发器
- 跟我学Spring Cloud(Finchley版)-21-Spring Cloud Config-配置属性加解密
- asp.net 页面引入外部JS 在IE6下延迟加载报错,IE7+均没问题
- SharePoint 站点集和子站点数据互相读取
- 64位计算机安装xp,xp系统一键安装64位win7
- 如何卸载当前最新版的奇某信天擎?
- 输入scor为80结果实验
- RabbitMQ-基础(二)
- 软考数据库考试有题库吗_科目一考试的题目都是从题库里挑的吗?科一考试技巧分享!...
- 怎么调整图片dpi大小?如何修改分辨率?
- DC-DC与LDO的区别
- SCORM 基础知识
- 佳能eosr控制环能否计算机控制,EOS R有哪些隐藏功能
热门文章
- 计算机云服务论文,云计算机教学平台探讨论文
- java jpa自身关联查询_使用JPA进行数据查询和关联查询
- automake生成静态库文件_Automake 详解
- 怎么找到手机录音机里的文件
- 如何将pdf文件的英文翻译成中文
- 考研计算机网络安全专业,北京交通大学计算机考研分数,网络安全专业
- windows开启ssh服务教程及常见问题
- Touch driver porting
- 利用PYTHON将netcdf(.nc)格式数据转换成JSON GeoJSON
- Flask部署 —— nginx+gunicorn+supervisor