Shell脚本中的冒泡排序及其他排序方式

shell中的数组操作小结和冒泡排序实现脚本分享 主要介绍了shell中的数组操作小结和冒泡排序实现脚本分享,需要的朋友可以参考下 立即下载

冒泡排序

原理

冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。

脚本实现
#!/bin/bash
paixu() {
arr=($@)
echo "旧数组的值为:${arr[@]}"
#获取数组长度
length=${#arr[@]}
#定义比较轮数,一般为数组长度减1
for ((a=1; a<$length; a++))
do
   #确定元素的位置,大的往后放,并且比较次数随着轮数的增加二减少
   for ((b=0; b<$length-$a; b++))
   do
        #定义第一个和第二个比较元素的值
        first=${arr[$b]}
        second=${arr[$b+1]}
        #如果第一个元素的值大于第二个元素的值,交换位置
        if [ $first -gt $second ];then
           #把第一个元素的值赋给一个临时变量temp
           temp=$first
           #把第二个元素的值赋给第一个元素
           arr[$b]=$second
           #再把第一个元素的值(temp的值)赋给第二个元素
           arr[$b+1]=$temp
        fi
    done
done
echo "排序后数组的值为:${arr[*]}"
}

list=$@
paixu $list

常规排序

原理

常规排序与冒牌排序的区别是常规排序不是比较相邻的两个元素,每一轮将一个数与数组比较,最大的放在最后,直至排序结束。

脚本实现

#!/bin/bash
#常规排序

arr=(20 50 30 60 10 40)
echo "原数组的值为:${arr[@]}"
length=${#arr[@]}
#定义排序轮数
for ((a=1; a<$length; a++))
do
  #假设索引为0的元素是最大的
  index=0
  #定义和第一个元素比较的索引,来确定最大的元素索引
  for ((b=1; b<$length-$a; b++))
  do
        #定义最大的元素的值
        max=${arr[$index]}
        #定义从索引1开始比较的元素的值
        yuansu=${arr[$b]}
        #判断如果从索引1开始比较元素的值大于当前最大元素的值,就记录最大值的索引到index
        if [ $yuansu -gt $max ];then
           index=$b
        fi
  done
  #定义每一轮比较的最后一个元素的索引
  last=$[$length-$a]
  #把当前轮次的最后一个元素的值赋给临时变量temp
  temp=${arr[$last]}
  #把最大的值赋给当前轮次的最后一个元素
  arr[$last]=${arr[$index]}
  #把temp里的原来最后一个元素的值赋给原最大值所在索引的元素
  arr[$index]=$temp
done

echo "排序后的数组为:${arr[*]}"

反转排序

原理

把数组的最后一个元素与第一个元素替换,倒数第二个元素与第二个元素互换,以此类推,直到把所有数组元素反转替换。以相反的顺序把原有数组的内容重新排序。

代码实现

#!/bin/bash
#反转排序
array=(10 70 30 40 50 20 60 30)
echo "数组为 10 70 30 40 50 20 60 30"
length=${#array[*]}
for ((i=0; i<length/2; i++))
do
   temp=${array[$i]}
   array[$i]=${array[$length-$i-1]}
   array[$length-$i-1]=$temp
done

echo ${array[*]}
~                              
统信UOS系统网络服务异常排查:WIFI图标消失与网络设置缺失的解决方案 本文详细解析了统信UOS系统WIFI图标消失与网络设置缺失的常见问题,提供了从基础修复到进阶排查的完整解决方案。重点分析了NetworkManager服务异常的根本原因,包括系统更新中断、权限配置错误等,并给出实用的命令行操作指南和预防措施,帮助用户快速恢复网络功能。 阅读详情

相关推荐

TC397 EB配置ADC软件触发:从零实现周期采样与中断处理

本文详细介绍了如何在Infineon AURIX TC397芯片上使用EB Tresos工具配置ADC软件触发,实现周期采样与中断处理。通过硬件连接、EB模块配置、代码初始化及数据处理的全流程解析,帮助开发者快速掌握ADC软件触发技术,提升嵌入式系统开发效率。

root9的博客 231

bash shell 生成10个随机数,并用冒泡排序法将其升序排序

1 #!/bin/bash 2 #__author__:lushenle 3 #description:Generaye 10 random numbers and sort 4 #Version:0.0.1 5 # 6 declare -a nums 7 declare -i t 8 for i in {0..9};do 9 nums[$i]=$RA...

weixin_30679823的博客 860

Qt 5.15.2静态编译避坑实录:MinGW 32位版从源码到Creator配置的全流程踩坑总结

本文详细介绍了Qt 5.15.2 MinGW 32位版本的静态编译全流程,包括环境准备、配置参数优化、编译过程监控及安装后配置。重点解决了静态编译中的常见问题,如参数顺序敏感、路径引号问题等,并提供了性能对比实测数据,帮助开发者高效完成静态编译。

weixin_26749245的博客 271

冒泡法对10个数升序排序

#include<stdio.h> int main() { int a[10]={3,4,7,0,8,5,1,9,6,2}; int i,j; int k,temp; for(i=0;i<9;i++) { for(j=0;j<9-i;j++) { if(a[j]>a[j+1]) //每次都比较相邻两个数,把大的数往...

weixin_43787492的博客 5713

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 456

图形引擎实战:镭射效果制作分享

该方案的优势1.遵循物理的2.可以使用少量的参数去调控镭射的效果。计算相对简单,缺点仍是颜色不能够自定义,还有一种常见的方案是采样一张镭射贴图来模拟,好处是颜色可以自定义同时性能上还很高效没有复杂的公式计算。我查阅了网上普遍的方案,常见的做法是制作一个Ramp图生成工具,然后将生成好的ramp图赋给材质。这两个方案的好处是美术同学可以手动的去控制镭射的颜色。最后就是Shader中对Ramp图的采样的部分,Ramp图的UV坐标是使用fresnel作为Ramp的U轴坐标,0.5作为V轴坐标。

qq_41166022的博客 1353

Shell(10)数组和冒泡排序

数组是存放相同类型数据的集合,在内存中开辟了连续的空间,通常配合循环使用。普通数组:不需要声明直接定义,下标索引只能是整数。关联数组:需要用declare -A声明否则系统不识别,索引可以是字符串。元素:指数组中每个值下标索引:从0开始,指每个元素所对应的自定义编号。定义方式第一种:直接把要加入数组的元素用小括号括起来,中间用空格分开 第二种:精确的给每一个下标索引定义一个值加入数组,索引数字可以不连续 第三种:先把要加入数组的元素全部先赋值给一个变量,然后引用这个变量加入到数组 第四种:根据下标定义 3.

tu464932199的博客 325

VMware虚拟机调用NVIDIA显卡全攻略:从3D加速到直通与vGPU

显卡虚拟化技术是虚拟化领域的关键组成部分,它通过在虚拟机中模拟或直接分配物理GPU资源,实现了图形渲染与通用计算的加速。其核心原理在于通过Hypervisor层对GPU指令进行拦截、转换或直接映射,从而平衡资源隔离与性能损耗。这项技术的核心价值在于提升资源利用率、实现计算环境隔离,并支持AI训练、3D渲染、科学计算等高性能负载的灵活部署。在应用场景上,轻量级图形界面加速、CUDA学习验证适合使用虚拟3D加速;而追求极致性能的机器学习训练、专业渲染则需依赖PCIe直通技术;对于企业级GPU资源池化与多租户共享

weixin_32308101的博客 1011

运用冒泡法将10个整数进行升序排序

#include <stdio.h> int main() { int i, j, t, a[10]; printf("\nInput 10 number :\n"); for (i = 0; i < 10; i++) scanf_s("%d",&a[i]); //输入需排序的5个数放在数组a中 for (i = 0; i < 9; i++) /* ...

weixin_45789625的博客 5848

Python爬虫实战:利用Playwright与反反爬技术抓取Crunchbase企业数据

在当今数据驱动的商业环境中,获取准确的企业信息对于市场分析、竞争情报和投资决策至关重要。Crunchbase作为全球领先的企业信息平台,包含了数百万家公司、投资者和关键人员的详细数据。本文将深入探讨如何使用Python最新爬虫技术Playwright,结合多种反反爬策略,高效抓取Crunchbase企业数据。我们将从爬虫基础概念讲起,逐步深入到高级技巧,并提供完整的代码实现,帮助读者掌握现代网络数据采集的核心技术。网络爬虫技术自互联网诞生以来经历了显著演变。

2201_76125261的博客 1833

信息安全管理与评估赛题解析-单机取证(含环境)

链接:https://pan.baidu.com/s/1OMzIq884dW2vAiUp0k2Ppg。链接:https://pan.baidu.com/s/1i5daMqhD53wYeQ6hYzRK6Q。链接:https://pan.baidu.com/s/1QFAjdQZK4sJ-gGRP42XPKA。链接:https://pan.baidu.com/s/1BSXvqN2ZGCQXewgFULoeyQ。链接:https://pan.baidu.com/s/1g9zu5ngBz_KMjW1eBMkJAw。

Brucye 1834

来一起冒泡吧!冒泡算法新理解!!!

冒泡排序 定义 类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。 基本思想: 冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值,把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就像气泡一样从底部上升到顶部。 算法思路 冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元

weixin_51614581的博客 426

【01】总目录——软件设计师50讲通关地图|从零基础到工程师职称

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏的01篇总目录,系统梳理了50篇博文的完整架构与核心逻辑。专栏覆盖软考软件设计师(中级)全部考点,分为导学规划、基础知识、设计模式、下午题专项、算法实战、冲刺模拟、收官进阶七大模块,既兼顾上午题75道单选题的理论攻坚,也聚焦下午题案例分析的解题能力提升。每篇博文均包含考点精讲、真题解析、实战技巧与速记方法,配套可运行代码、解题模板及备考资源。无论你是零基础转行、在校学生还是在职程序员,都能通过这份学习地图明确进度、精准定位薄弱环节,高效搭建知识体系

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1279

【简单认识linux中Shell脚本实现数组冒泡排序等简单算法排序】

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。选择一个元素,依次从前往后比较,如果升序,就将较小的数放在前面,将较大的数放在后面待比较的位置。2.shell脚本实现。

qq_67633755的博客 517

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

shell脚本之冒泡排序

#!/bin/bash #键盘输入 冒泡排序 k=0 while true do read -p "是否输入数值(y/n)" doe if [ $doe == "n" ] then break fi read -p "请输入第$(($k+1))个元素" key score[$k]=$key let k++ done for ((i=1;i<${#score[*]};i++)) #比较轮数为数组,长度减一,从1开始 do for ((j=0;j<${#score[

咸鱼吧的博客 1020

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

shell脚本写的冒泡排序脚本,好长时间没有写了

纯正shell写的冒泡排序脚本,没有注释,可以参看一下闲来无事练习一下shell脚本的shell脚本写了我一个小时 闲来无事练习一下shell脚本的shell脚本写了我一个小时 #!/bin/bash num=0 read -a a c=1 b=`echo ${#a[@]}` until [ $c -eq $(($b-1)) ] do for j in `seq 0 $(($b-2))` ...

qq_38978734的博客 212

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

教你怎么编写冒泡排序的shell脚本

1、数组值 #!/bin/bash score=(1 10 66 20 11 88 6 19) for ((i=1;i<${#score[*]};i++)) do for ((j=0;j<${#score[*]}-$i;j++)) do if [ ${score[j]} -lt ${score[(($j+1))]} ] then temp=${score[j]} score[j]=${score[(($j...

zimao_的博客 216

shell脚本实现冒泡排序(优化)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33744854的博客 218

数组及冒泡排序

数组及冒泡排序Shell数组1.数组定义的方法2.数组的操作冒泡排序1.排序流程2.键盘输入冒泡排序 Shell数组 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小 与大部分编程语言类似,数组元素的下标由0开始。 1.数组定义的方法 方法一:数组名=(value0 value1 value2 …) 方法二:数组名=([0]=value [1]=value [2]=value … )[ ]:下标 方法三:列表名=“value0 value1 valu

m0_50650953的博客 126

Shell-数组和排序

Shell-数组和排序一、数组定义方法1、方法一2、方法二3、方法三4、方法四二、数组包括的数据类型1、数值类型2、获取数组长度 一、数组定义方法 1、方法一 数组名=(value0 value1 value2 …) array1=(10 20 30 40 50) 2、方法二 数组名=([0]=value [1]=value [2]=value …) array2=([0]=10 [1]=20 [2]=30 [3]=40 [4]=50) 3、方法三 列表名=“value0 value1 value2

志当存高远 644

shell脚本数组及排序算法

文章目录一、数组概念1、数组定义方法 一、数组概念 1、数组定义方法 方法一: 数组名=(value0 value1 value2 …) 方法二: 数组名=([0]=value [1]=value [2]=value …) 方法三: 列表名=“value0 value1 value2 …” 数组名=($列表名) ...

fangxin_zonghuo的博客 867

shell脚本数组

shell脚本数组 一、数组的概念 方法一 数组名=(value0 value1 value2 …) 方法二 数组名=([0]=value [1]=value [2]=value …) 方法三 数组名[0]=“value” 数组名[1]=“value” 数组名[2]=“value” 2、数组包括的数据类型 (1)数值类型 (2)字符类型(字符串) 使用" "或''定义,防止元素当中有空格,元素按空格分割 3、索引(下标) 第一个索引始终是数字 0,且添加到数组中的每个后续元素的索

weixin_62452835的博客 770

C高级学习DAY04:shell脚本

如果选择2,则输入取款金额,如果取款金额大于实际金额,则提示账户余额不足,请重新输入,如果账户余额小于等于实际金额,则提示取款成功,剩余金额。2.输入用户名和密码(加密输入),实现密码的三次登录 默认用户名admin 密码1234 账户存款10000。3. 定义数组赋值为/home/ubuntu中的文件以及目录名, 循环计算文件的个数,目录的个数。shell的选择结构:单分支if 双分支if else 多分支if elif case..in。如果选择3,则输入存款金额,并提示 存款成功,余额的值。

qq_72097380的博客 284

python显示排名排序_(转)一个显示排序过程的Python脚本

2009-05-08 11:16之前向大家介绍过《一个排序算法比较的网站》,那个网站用动画演示了各种排序算法,并分析了各种排序算法。这里,要向大家推荐一个Python脚本,其可以把排序的过程给显示出来。下图是“冒泡排序”的一个示例,其中:折线表示了各个元素的位置变化。折线的深浅表示了元素的大小。越深则越大。同样,还有其它一些排序算法的图片:堆排序(Heap Sort)选择排序(Selection)...

weixin_28818643的博客 410

Shell脚本循环语句与函数

Shell脚本循环语句与函数前言一、循环语句(1)for循环语句 前言 一、循环语句 (1)for循环语句 格式: for 变量名 in 取值列表 do 命令序列 done 用法: 读取不同的变量值,用来逐个执行同一组命令 for循环经常使用在已经知道要进行多少次循环的场景 语法结构: (1)列表循环 (2)不带列表循环 (3)类C风格的for循环 调用显示i的值 for语句案列 for i in {1..5} //{}里面不识别变量 do e

qq1356059950的博客 655

shell脚本之函数

1、函数 2、数组使用方法 1、shell函数 ■将命令序列按格式写在一起 ■可方便重复使用命令序列 ■shell函数定义(使用return或exit可以显示的结束函数) [ function ]函数名(){ 命令序列 [return x] } ■调用函数的方法 函数名 【参数1】 【参数2】 例子1 函数调用 例子2当函数名重复时则调用最下方的函数 例子3 函数调用yum本地仓库 ...

ruocheng6的博客 1299
上一篇: Shell脚本数组详解
下一篇: 10分钟教你学会正则表达式
糖果剑客
博客等级 码龄6年 97粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值