Shell脚本实现数组冒泡排序等简单算法排序

news2024/10/7 17:31:02

目录

一、冒泡排序

1.简介

2.基本思想

3.算法思路

4.shell脚本实现

二、选择排序

1.简介

2.基本思想

3.shell脚本实现

三、插入排序

1.算法思路

2.shell脚本实现

四、反转排序

1.作用

2.shell脚本实现


一、冒泡排序

1.简介

类似气泡上涌的动作,会将数据在数组中从小到大或者从大到小不断的向前移动。

2.基本思想

冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值, 把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的 位置),这样较小的元素就像气泡一样从底部上升到顶部。

3.算法思路

冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了。而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少。

4.shell脚本实现

[root@localhost1 ~]#vim sort.sh
#!/bin/bash
arr=(12 324 543 213 65 64 1 3 45)
length=${#arr[@]}
​
for ((i=1;i<=length-1;i++))
  do
    for ((j=0;j<length-i;j++))
    do
      first=${arr[$j]}
      k=$[$j + 1]
      second=${arr[$k]}
      if [ $first -gt $second ];then
        temp=$first
        arr[$j]=$second
        arr[$k]=$temp
      fi
    done
  done
echo "升序排列后:${arr[@]}"
​
for ((i=1;i<=length-1;i++))
  do
    for ((j=1;j<=length-i;j++))
    do
      second=${arr[$j]}
      k=$[$j - 1]
      first=${arr[$k]}
      if [ $first -lt $second ];then
        temp=$second
        arr[$j]=$first
        arr[$k]=$temp
      fi
    done
  done
echo "降序排列后:${arr[@]}"
​
[root@localhost1 ~]#bash sort.sh
升序排列后:1 3 12 45 64 65 213 324 543
降序排列后:543 324 213 65 64 45 12 3 1

二、选择排序

1.简介

与冒泡排序相比,直接选择排序的交换次数更少,所以速度会快些。

2.基本思想

将指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,注意这里区别冒泡排序,不是交换相邻元素,而是把满足条件的元素与指定的排序位置交换(如从最后一个元素开始排序),这样排序好的位置逐渐扩大,最后整个数组都成为已排序好的格式。

3.shell脚本实现

[root@localhost1 ~]#vim selectsort.sh
#!/bin/bash
arr=(21 232 34 545 12 4 65 2)
length=${#arr[@]}
for ((a=1;a<length;a++))
do
  index=0
  for ((b=1;b<=length-a;b++))
  do
    if [ ${arr[$b]} -gt ${arr[$index]} ];then
      index=$b
    fi
  done
  last=$[length - a]
  temp=${arr[$last]}
  arr[$last]=${arr[$index]}
  arr[$index]=$temp
done
​
echo "排序后的数组为:${arr[@]}"
​
​
[root@localhost1 ~]#vim selectsort.sh
[root@localhost1 ~]#bash selectsort.sh
排序后的数组为:2 4 12 21 34 65 232 545

三、插入排序

1.算法思路

选择一个元素,依次从前往后比较,如果升序,就将较小的数放在前面,将较大的数放在后面待比较的位置。

2.shell脚本实现

[root@localhost1 ~]#vim insertsort.sh
#!/bin/bash
arr=(23 3 34 652 454 122 4 6)
length=${#arr[@]}
​
for ((a=1;a<length;a++))
do
  for ((b=0;b<a;b++))
  do
    if [ ${arr[$a]} -lt ${arr[$b]} ];then
      temp=${arr[$a]}
      arr[$a]=${arr[$b]}
      arr[$b]=$temp
    fi
  done
done
​
echo "排序后的数组为:${arr[@]}"
​
[root@localhost1 ~]#bash insertsort.sh
排序后的数组为:3 4 6 23 34 122 454 652

四、反转排序

1.作用

将数组中所有的元素反转排序。

2.shell脚本实现

[root@localhost1 ~]#vim reservesort.sh
#!/bin/bash
#反转排序
arr=(10 20 30 40 50 60 70 80 90)
length=${#arr[@]}
#设置前后两个替换元素中的前面的元素下标的取值范围,下标用0开始
for ((a=0; a<length/2; a++))
do
  temp=${arr[$a]}
  arr[$a]=${arr[$length-1-$a]}
  arr[$length-1-$a]=$temp
done
echo "反转排序后的数组顺序为: ${arr[@]}"
​
[root@localhost1 ~]#bash reservesort.sh
反转排序后的数组顺序为: 90 80 70 60 50 40 30 20 10

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/632594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java入门之学习随记(三)

一. 栈内存和堆内存 堆内存:存放"引用数据类型的数据"和"new出来的对象",注意-创建出来的对象只包含各自的成员变量,不包括成员方法. 栈内存:存放"基本数据类型的数据","引用数据类型的变量名"以及"对象的引用",但是引用数…

k8s之ReplicaSet回收pod的优先级

ReplicaSet syncReplicaSet的逻辑&#xff0c;首先找到rs下相关的pod // 从informer中获取当前ns下所有的podallPods, err : rsc.podLister.Pods(rs.Namespace).List(labels.Everything())if err ! nil {return err}// 忽略不健康的podfilteredPods : controller.FilterActiveP…

CentOS桥接模式下设置静态IP并解决java.net.ConnectException: Connection timed out: connect

一、前言 最近在配置服务器&#xff0c;DHCP模式下IP地址不固定&#xff0c;每次SSH远程登录连接不上&#xff0c;都要查看新动态分配的IP地址重新配置&#xff0c;感觉些许麻烦&#xff0c;于是给机器配置了静态固定IP。 动态主机配置协议DHCP&#xff08;Dynamic Host Confi…

Shell脚本练习题(附详细解题过程)

目录 一、利用for循环打印99乘法表 二、十进制转二进制 三、将十进制ip地址转换为二进制格式 四、检测某个网段中存活的主机并输出其ip地址 五、检查文件中用户名是否存在并提示创建用户和设置密码 六、检查httpd服务并开启 七、根据百米赛跑成绩判断结果 八、随机数…

栈和队列(数据结构刷题)[一]-python

文章目录 前言一、原理介绍二、用栈实现队列1.操作2.思路 三、关于面试考察栈里面的元素在内存中是连续分布的么&#xff1f; 前言 提到栈和队列&#xff0c;大家可能对它们的了解只停留在表面&#xff0c;再深入一点&#xff0c;好像知道又好像不知道的感觉。本文我将从底层实…

Django----------模板、静态文件、案例(城市天气预报)、请求和响应

目录 1.templates模板 2.静态文件 1.static目录 2.引用静态文件 1.方式一&#xff1a;直接引用 2.方式二&#xff1a;头部及内部引用 3. 模板语法 1.取内容 2.取下标 3.for循环 4.利用字典 5.列表里套字典 6.if条件语句 7.总结 4.案例&#xff08;城市天气预…

CH573-01-GPIO-LED——RISC-V内核BLE MCU快速开发教程

1. 新建工程 1) NEW Project 点击“File->New->MounRiver Project”&#xff1a; 2) finish 选择CH573F的裸机开发工程模板&#xff0c;如下图&#xff0c;然后点击“finish” 3) 编译检查 4) 精简代码 打开工程目录下的./src/main.c文件&#xff0c;修改删掉生成的串口测…

动态规划III (买股票-121、122、123、188)

CP121 买股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利…

Vue 中的几种动画效果

Vue 中的动画效果 在 Vue 中&#xff0c;动画效果是非常常见的交互方式。它可以为用户提供更加生动的交互体验&#xff0c;增强用户的参与感和满意度。在本文中&#xff0c;我们将探讨 Vue 中的动画效果的基本原理和用法&#xff0c;并给出一些实例代码来帮助读者更好地理解。…

『手撕 Mybatis 源码』06 - Mapper 代理方式初始化

Mapper 代理方式初始化 首先修改一下 SqlSession 获取代理对象方式&#xff0c;即通过 getMapper() 来拿到动态代理对象 public class MybatisTest {/*** 问题1&#xff1a;<package name"com.itheima.mapper"/> 是如何进行解析的&#xff1f;* 解答&#xf…

算法刷题-数组-有序数组的平方

977.有序数组的平方 力扣题目链接 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#…

clang到底是什么?gcc和clang到底有什么区别?

最近发现自己对 GNU GCC 和 Clang 的区别不太清楚&#xff0c;影响到一些实现和学习&#xff0c;所以趁这两天有空好好研究了一下。 在这个研究过程中&#xff0c;我发现很多问题其实源自于语言&#xff08;不是指编程语言&#xff0c;而是中文和英文翻译的失真&#xff09;和…

前端前端学习不断

卷吧卷吧...&#xff0c;这东西什么时候是个头啊……

智能指针(2)

智能指针&#xff08;2&#xff09; shared_ptr(共享型智能指针)基础知识特点引用计数器共享型智能指针结构理解 shared_ptr仿写删除器类计数器类shared_ptr类使用以及仿写代码的理解 循环引用_Weaks 初始化智能指针的方法 shared_ptr(共享型智能指针) 基础知识 在java中有一…

chatgpt赋能python:Python如何判断输入的字符——基础教程与实例

Python如何判断输入的字符——基础教程与实例 时至今日&#xff0c;互联网已经成为人们获取信息的重要途径&#xff0c;而搜索引擎优化&#xff08;SEO&#xff09;则是网站重要的推广手段之一。而Python作为一种高级编程语言&#xff0c;在实现SEO时也有很大的优势&#xff0…

chatgpt赋能python:Python如何进行升序和降序排列

Python如何进行升序和降序排列 Python是一种非常流行的编程语言&#xff0c;由于其在数据科学、机器学习和人工智能等领域的强大表现&#xff0c;越来越多的人开始学习和使用Python。在Python中&#xff0c;排序是一项非常常见的操作。在这篇文章中&#xff0c;我将向您介绍如…

stable diffusion webui 登录接口(login)api接口调用(使用C#)

唠嗑 本次将跟读者讲一下如何通过C#请求sd webui api【login】接口&#xff0c;如果读者觉得文章有用&#xff0c;请给【点个赞】吧&#xff0c;有问题可以评论区提问。 实战 1.配置api启用参数 启动webui时&#xff0c;需加上【–api】 、【–api-auth 账号:密码】 和【–…

chatgpt赋能python:Python字符类型判断:如何判断字符是字母或数字

Python字符类型判断&#xff1a;如何判断字符是字母或数字 在Python编程中&#xff0c;经常需要判断一个字符是字母还是数字。本文将介绍如何在Python中判断字符类型&#xff0c;并给出几个示例。 判断字符类型的方法 在Python中&#xff0c;可以使用以下方法来判断字符类型…

chatgpt赋能python:Python中如何删除变量中的字符

Python中如何删除变量中的字符 在Python编程中&#xff0c;我们有时需要清除变量中的字符。删除字符可以是去掉字符串中的某些字符&#xff0c;也可以是从列表或元组中删除某些元素。本文将介绍Python中如何删除变量中的字符。 删除字符串中的字符 Python使用字符串的切片操…

网络安全入门学习第十五课——PHP基础

文章目录 一、WEB技术1、什么是web2、B/S架构3、C/S架构 二、PHP概述1、PHP是什么2、PHP受欢迎的原因3、基于MVC模式的PHP框架4、常用编译工具5、PHP环境搭建6、开发工具 三、PHP基本语法格式1、标记2、输出语句3、注释4、标识符 四、数据与运算1、常量1.1、常量定义1.2、预定义…