
4种 数组排序算法(冒泡/直接/反转/希尔排序),好好拿捏它!
方法1:直接将数组初始化为多个值的序列: 方法2:逐个指定数组中的值: 方法3:使用带有双引号的字符串来定义数组的元素: 方法4:使用括号包裹数组内容: 方法1:使用指定索引新增元素: 方法2:使用数组长度获取当前索引: 方法3:使用双引号将数组作为字符串处理并追加元素: 方法4:使用
发布日期:2021-05-20 00:14:05
浏览次数:21
分类:精选文章
本文共 2829 字,大约阅读时间需要 9 分钟。
数组
数组是一种基本的数据结构,能够存储一系列的数据单元,并允许通过索引位置进行快速的元素获取和修改。以下是关于数组的一些基本知识和操作方法。
数组包括的数据类型
数组可以存储多种数据类型,主要包括:
- 数值类型(例如整数、浮点数)
- 字符类型(可以使用双引号
" "
或单引号' '
定义)
数组定义方法
在Bash中,可以通过以下几种方式定义数组:
array_name=(value0 value1 value2 ...)
array_name[0]="value" array_name[1]="value" array_name[2]="value"
array_name=( "${values[@]}" value1 value2 ...)
注意:双引号必须保留,否则可能导致数组内容被拆分。
array_name[0]="value" array_name[1]="value" array_name[2]="value"
获取数组长度
要获取数组的长度,可以使用以下命令:
arr_number=(1 2 3 4 5)arr_length=${#arr_number[*]}
或
arr_length=${#arr_number[@]}
获取数组元素
可以使用以下命令来获取数组的元素:
echo ${arr_number[*]} # 输出数组所有元素echo ${arr_number[@]} # 输出数组所有元素
读取指定索引的元素
arr_index2=${arr_number[2]}echo $arr_index2
数组遍历
使用循环结构遍历数组:
#!/bin/basharr=(10 20 30 40 50)for i in ${arr[@]} do echo $idone
数组切片
可以提取数组的一部分元素:
arr=(1 2 3 4 5)echo ${arr[@]} # 输出整个数组echo ${arr[@]:0:2} # 获取前两个元素echo ${arr[@]:1:3} # 获取从第二个元素开始的三个元素
数组替换
使用替换命令可以直接修改数组中的值:
arr=(1 2 3 4 5)# 查看替换前的数组值echo ${arr[@]}# 替换特定值echo ${arr[@]/4/66}# 实现数组修改,需使用赋值方式arr=(${arr[@]/4/66})# 查看替换后的数组值echo ${arr[@]}
数组删除
删除整个数组或指定索引的元素:
arr=(1 2 3 4 5)unset arr # 删除数组arr=(1 2 3 4 5)unset arr[2] # 删除第三个元素
数组追加元素
可以通过以下方法追加元素:
array_name[index]=value
array_name[${#array_name[@]}]=value
array_name=( "${array_name[@]}" value1 value2 )
+
运算符追加元素(需使用括号): array_name+=(value1 value2 ...)
向函数传数组参数
要将数组传递给函数,需将数组拆分成单个元素:
array=(3 2 1 4 5)test1 $array
函数内部可用$@
获取所有参数:
test1() { new_array=($1) # 将第一个参数作为数组 echo "新数组值为: ${new_array[*]}"}
从函数返回数组
函数可以返回数组作为变量:
test2() { new_array=$(echo $@) for ((i=0; i<${#new_array[@]}; i++)) { new_array[ijection]? } return new_array}
数组排序算法
① 冒泡排序
- 基本思想:通过比较相邻元素,逐步将较大的元素“冒泡”到数组末尾,直到整个数组按要求排序。
- 算法思路:
- 外层循环控制排序轮数,通常为数组长度减1。
- 内层循环从当前轮数开始,逐个比较相邻元素。
- 比较过程中,较大的元素交换位置。
- 实现代码:
arr=(63 4 24 1 3 15)length=${#arr[@]}for ((i=1; i<$length; i++)) { for ((j=0; j<$length - i; j++)) { if [ ${arr[j]} -gt ${arr[j+1]} ]; then temp=${arr[j]} arr[j]=${arr[j+1]} arr[j+1]=temp fi done}echo "排序后数组:${arr[*]}"
② 直接选择排序
- 基本思想:将数组中的最大元素找出,放在排序好的位置,逐步重复这个过程,直到整个数组排序完成。
- 实现代码:
arr=(45 35 25 20 15)length=${#arr[@]}for i=(5 4 3 2 1); do max=-1 for j=0 to $length-1; do if arr[j] > max; then max=arr[j] index=j fi done arr[index]= -1 arr[A index= # 代码简化为直接交换最大值到最后done
③ 反转排序
- 基本思想:将数组中的元素反转,通过交换相邻元素的位置,使数组元素按照相反顺序排列。
- 实现代码:
arr=(1020 30 40 50 60)for ((i=0; i<${#arr[@]}/2; i++)) { temp=${arr[i]} arr[i]=${arr[ ${#arr[@]} -1 -i ]} arr[ ${#arr[@]} -1 -i ]=temp}echo "反转排序后数组:${arr[*]}"
④ 希尔排序
- 基本思想:将数组分成若干组,逐步调整这些组中的元素,使其按顺序排列。
- 实现代码:
arr=(20 10 30 50 60 40)length=${#arr[@]}gapxFFFF
总结
通过以上方法,可以对数组进行基本的操作,包括定义、查询、修改、排序等。选择合适的算法和方法,能够提升代码效率并实现不同需求。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月15日 23时32分18秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring Security 架构与源码分析
2019-03-16
教程丨使用MeterSphere做Dubbo接口测试
2019-03-16
【毕设-STM32f103寄存器版本】智能防盗系统
2019-03-16
勒索病毒Kraken2.0.7分析
2019-03-16
MySQL错误1366处理方法
2019-03-16
pytorch深度学习中每个epoch运行时间的统计代码
2019-03-16
VxWorks 操作系统学习笔记
2019-03-16
驱动程序之_1_字符设备_13_USB设备_1_基本概念
2019-03-16
wxPython下载安装教程
2019-03-16
HERest源码解析
2019-03-16
java 原型模式(大话设计模式)
2019-03-16
微机原理 6-计算机中常用的数制
2019-03-16
web访问ejb测试 详解
2019-03-16
window系统下安装使用curl命令工具
2019-03-16
假如计算机是中国人发明的,那代码应该这么写
2019-03-16
神器 Codelf !
2019-03-16
趣图:会算法和不会算法的区别
2019-03-16
区块链会2020再次爆发,先学点DAPP压压惊,跟我一起学《区块链DApp入门实战》
2019-03-16