当前位置: 首页 > news >正文

【shell脚本编程】-4 shell脚本编写冒泡排序

文章目录

    • 1、脚本要求
    • 2、脚本编写
    • 3、脚本解释
    • 4、算法思路

1、脚本要求

使用shell语言编写一个冒泡排序的脚本

2、脚本编写


#!/bin/bashif [ $# -eq 0 ]; thenecho "请提供需要排序的数字作为参数"echo "用法: $0 数字1 数字2 ... 数字n"exit 1
fiarr=("$@")n=${#arr[@]}for ((i = 0; i < n; i++)); dofor ((j = 0; j < n - i - 1; j++)); doif [ ${arr[j]} -gt ${arr[j+1]} ]; thentemp=${arr[j]}arr[j]=${arr[j+1]}arr[j+1]=$tempfidone
doneecho "排序前: $*"
echo "排序后: ${arr[@]}"

3、脚本解释


#!/bin/bash# 检查是否提供了待排序的数字
if [ $# -eq 0 ]; thenecho "请提供需要排序的数字作为参数"echo "用法: $0 数字1 数字2 ... 数字n"exit 1
fi# 将命令行参数保存到数组中
arr=("$@")# 获取数组长度
n=${#arr[@]}# 冒泡排序核心算法
for ((i = 0; i < n; i++)); do# 每轮排序后最大的元素会"浮"到末尾,所以下一轮可以少比较一次for ((j = 0; j < n - i - 1; j++)); do# 比较相邻的两个元素if [ ${arr[j]} -gt ${arr[j+1]} ]; then# 交换元素temp=${arr[j]}arr[j]=${arr[j+1]}arr[j+1]=$tempfidone
done# 输出排序结果
echo "排序前: $*"
echo "排序后: ${arr[@]}"

4、算法思路

  • 相邻两个元素比大小,小的元素左移位置,大的元素右移,(重要)

  • 先定义数组长度,写for循环,for循环中外层循环定义了冒泡排序比较的轮次数,内层for循环中,定义了比较次数

  • 中间,数组的相邻元素值的比较,是定义一个变量名,将右侧元素值取出来。然后将左边的元素值覆盖右边,再将定义的变量值,赋值给第一个元素,完成数组元素值的位置交换交换 最后输出排序后的数组所有元素

http://www.dtcms.com/a/327100.html

相关文章:

  • Redis命令大全
  • 新型Windows RPC攻击可劫持服务并完全攻陷Active Directory,PoC已公开
  • C++——模板初阶
  • 企业培训笔记:宠物信息管理--实现宠物信息的添加
  • 计算机毕设不知道选什么题目?基于Spark的糖尿病数据分析系统【Hadoop+Spark+python】
  • 多语言与隐形攻击:LLM安全防线为何被频频突破?
  • 雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论
  • 跨设备开发不再难:HarmonyOS 分布式任务管理应用全解析
  • 【web站点安全开发】任务2:HTML5核心特性与元素详解
  • 树:数据结构中的层次架构
  • 【后端】Spring @Resource和@Autowired的用法和区别
  • 一键生成 Android 适配不同分辨率尺寸的图片
  • [GESP202309 六级] 2023年9月GESP C++六级上机题题解,附带讲解视频!
  • Airtable 入门指南:从创建项目到基础数据分析与可视化
  • 修复图像、视频和3D场景的AI工具–Inpaint Anything
  • PCIe Electrical Idle Sequences ( EIOS and EIEOS )
  • C++ 中的单例模式:使用静态方法管理唯一实例
  • 告别土味埋点:Java 优雅统计方法耗时的艺术与实践​
  • 企业高性能web服务器(4)
  • 【实时计费系统的Redis实践:视频平台按分钟付费服务的原子扣费与对账】
  • C++11-下
  • JPrint免费的Web静默打印控件:服务端口号修改
  • 医疗矫正流(MedRF)框架在数智化系统中的深度应用
  • 【bug 解决】串口输出字符乱码的问题
  • 【数据结构】——顺序表链表(超详细解析!!!)
  • 【KO】android 音视频
  • 打包工具:WebPack 和 Vite 对比
  • [激光原理与应用-254]:理论 - 几何光学 - 自动对焦在激光器中的应用?
  • 《吃透 C++ 类和对象(上):封装、实例化与 this 指针详解》
  • cpp-httplib 测试https功能