当前位置: 首页 > 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.lryc.cn/news/619137.html

相关文章:

  • C++11新增关键字和范围for循环
  • Flutter ExpansionPanel组件(可收缩的列表)
  • Qt中定时器介绍和使用
  • Gradle(二)Gradle的优势、项目结构介绍
  • python2操作neo4j
  • HTTPS加密与私有CA配置全攻略
  • spring-cloud整合nacos详细攻略
  • 读《精益数据分析》:UGC平台的数据指标梳理
  • 11-docker单机版的容器编排工具docker-compose基本使用
  • 数据分析专栏记录之 -基础数学与统计知识
  • Threejs 设置灯光照射点位置 辅助器不跟随移动
  • 大数据中的数据压缩原理
  • QT第五讲-控件QLineEdit、QSpinBox、QSlider、QScrollBar、QDial、QProgressBar、QLCDNumber
  • 计算机网络摘星题库800题笔记 第4章 网络层
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • MCU中的液晶显示屏LCD(Liquid Crystal Display)控制器
  • VUE的8个生命周期
  • C++list(2)
  • 【JavaEE】多线程之线程安全(上)
  • 串口通信学习
  • 【PyTorch学习笔记 - 03】 Transforms
  • Spring-Cache 缓存数据
  • Dubbo 3.x源码(33)—Dubbo Consumer接收服务调用响应
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:UART Controller,通用异步收发传输器控制器
  • I2C 接收与发送数据的流程
  • 成都影像产业园实训考察:重庆五一职院关注技能就业
  • 【DL】深层神经网络
  • 《疯狂Java讲义(第3版)》学习笔记ch1
  • 力扣 hot100 Day71
  • 【1】Transformers快速入门:自然语言处理(NLP)是啥?