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

【数组排序算法】

目录

  • 一、数组排序算法
    • 1、冒泡排序算法
      • 1.1、图形解释
      • 1.2、冒泡算法的脚本写法
  • 二、直接选择排序
    • 1.1、动态图解
    • 1.2、直接选择排序算法的脚本编写
  • 三、直接插入排序
    • 1.1、基本思想:
    • 1.2、动态图解
    • 1.3、直接插入排序的算法脚本编写
  • 四、反向序列算法
    • 1.1、反向序列算法的脚本编写


一、数组排序算法

1、冒泡排序算法

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

1.1、图形解释

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

1.2、冒泡算法的脚本写法

使用函数来进行对数组内部值的排序

#!/bin/bash
MAOPAO(){
arr=($@)#获取数组的长度
#使用#命令来查看这个数组的所有下标
length=${#arr[@]}#定义外层循环用来比较轮数,比较轮数为数组长度减1,且从1开始
for ((a=1; a<length; a++))
do#内层循环用来确定比较元素的位置,比较相邻两个元素,较大的元素往后移动,并且比较次数会随着比较轮数的增加而减少for ((b=0; b<length-a; b++))do#获取相邻两个元素的前面元素的值first=${arr[$b]}#获得相邻两个元素的后面元素的值c=$[b + 1]second=${arr[$c]}#比较两个相邻元素的值大小,如果前面元素的值较大。则与后面的元素交换位置if [ $first -gt $second ]then#使用临时变量保存前面元素的值,实现两个相邻元素交换位置tmp=$firstarr[$b]=$secondarr[$c]=$tmpfidone
doneecho "冒泡排序后的数组的值为: ${arr[@]}"
}##### main #####
read -p "请输入一组列表: " numarray=$num
echo "排序前的数组的值为: ${array[@]}"MAOPAO ${array[@]}

实现了自动调整数组的排序
在这里插入图片描述

二、直接选择排序

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

解释:
假设第一个数字为最大的,让这个假设最大的数字与后面的数字挨个比较

请添加图片描述

1.1、动态图解

在这里插入图片描述

1.2、直接选择排序算法的脚本编写

使用函数来编写直接选择排序的脚本编写

#!/bin/bash
XUANZHE(){
arr=($@)#获取数组的长度
#使用#命令来查看这个数组的所有下标
length=${#arr[@]}#定义外层循环的轮数,为数组长度减1,且从1开始
for ((a=1;a<length;a++))
do#每轮循环的初始最大元素的下标,从0开始,即第一个元素i=0#内层循环定义用于作与当前最大元素作比较的元素下标范围,从1开始,且每轮比较的最后一个元素下标会随着轮数的增加而减少for ((b=1;b<=length-a;b++))do#通过比较,获取当前轮数中最大元素的下标if [ ${arr[$i]} -lt ${arr[$b]} ]theni=$bfi
done#获取当前轮数的最后一个元素的下标last=$[length - a]#先用临时变量获取当前轮数的最后一个元素的值tmp=${arr[$last]}#将最大元素的值赋给当前轮数的最后一个元素arr[$last]=${arr[$i]}#将临时变量的值,即原最后一个元素的值作交换arr[$i]=$tmpdone
echo "排序后的数组的值为: ${arr[@]}"
}##### main #####
read -p "请输入一组列表: " num
array=$numecho "排序前的数组值为: ${array[@]}"XUANZHE ${array[@]}

三、直接插入排序

1.1、基本思想:

在待排序的元素中,假设前n-1个元素已有序,现将第n个元素插入到前面已经排好的序列中,使得前n个元素有序。按照此法对所有元素进行插入,直到整个序列有序。

但我们并不能确定待排元素中究竟哪一部分是有序的,所以我们一开始只能认为第一个元素是有序的,依次将其后面的元素插入到这个有序序列中来,直到整个序列有序为止

1.2、动态图解

在这里插入图片描述
依次与元素比较,如果后面的值大于小于前面的值就向前面插入,依次比较
在这里插入图片描述

1.3、直接插入排序的算法脚本编写

#!/bin/bash
CHARU(){
arr=($@)#获取数组的长度
#使用#命令来查看这个数组的所有下标
length=${#arr[@]}
#外层循环定义待排序的元素下标位置 
for  ((a=1; a<length; a++))
do#内层定义已排好的序列的元素下标位置范围for ((b=0; b<a; b++))do#将待排序的元素和前面已经排序好的元素依次比较,较小的数会交换到已排好序的元素位置,较大的数会放到待排序的元素位置if [ ${arr[$a]} -lt ${arr[$b]} ]thentmp=${arr[$a]}arr[$a]=${arr[$b]}arr[$b]=$tmpfidone
doneecho "排序后数组的值为: ${arr[@]}"
}##### main #####
read -p "请输入一组列表: " num
array=$numecho "排序前的数组值为: ${array[@]}"CHARU ${array[@]}

四、反向序列算法

1.1、反向序列算法的脚本编写

#!/bin/basharr=(1 2 3 4 5 6 7 8 9)
echo "排序前数组的值为: ${arr[@]}"length=${#arr[@]}for ((a=0; a<length/2; a++))
dotmp=${arr[$a]}#获取当前轮数的最后一个元素下标,会随着轮数的增加而减少last=$[length-1-a]arr[$a]=${arr[$last]}arr[$last]=$tmpdoneecho "排序后数组的值为: ${arr[@]}"

相关文章:

【数组排序算法】

目录 一、数组排序算法1、冒泡排序算法1.1、图形解释1.2、冒泡算法的脚本写法 二、直接选择排序1.1、动态图解1.2、直接选择排序算法的脚本编写 三、直接插入排序1.1、基本思想&#xff1a;1.2、动态图解1.3、直接插入排序的算法脚本编写 四、反向序列算法1.1、反向序列算法的脚…...

制造企业选择库存管理条码工具需要关注哪些点?

Dynamsoft Barcode Reader SDK 一款多功能的条码读取控件&#xff0c;只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK&#xff0c…...

SPI配置

I/O配置 主输出、从输入&#xff08;MOSI&#xff09; 主出从入&#xff08;MOSI &#xff09;引脚是主器件的输出和从器件的输入&#xff0c;用于主器件到从器件的串行数据传输。当SPI 配置为主器件时&#xff0c;该引脚为输出&#xff0c;当 SPI 配置为从器件时&#xff0c;该…...

给你们讲个笑话——低代码会取代程序员

今天是正经男&#xff0c;我们严肃讨论一下一直以来争吵不休的取代问题。 低代码开发平台&#xff0c;低代码技术会取代开发人员么&#xff1f; 一、背景 低代码开发平台的普及&#xff0c;让很多公司对快速生成应用抱有很大期望。甚至有人认为&#xff0c;低代码开发平台未来…...

Kotlin的出现无疑是为了超越Java而存在

Kotlin的出现无疑是为了超越Java而存在。在Google I/O 2017中&#xff0c;Google 宣布 Kotlin 成为 Android 官方开发语言&#xff0c;背景就是Oracle告Google侵权使用java。众所周知&#xff0c;Java的跨平台的开发语言&#xff0c;得益于虚拟机。我比较关注Kotlin用于Android…...

基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)

一、云LIS系统是将各种样本、免疫、临检、放免、及实验用的分析仪器&#xff0c;通过网络管理和传输实验分析过程中全部数据。对每一专业&#xff0c;实现检验申请、样本采集、样本核收、联机检验、质量控制、报告审核到报告发布的全环节的信息化管理平台。 二、基于B/S架构的云…...

Webpack5有哪些更新?

52. Webpack5有哪些更新&#xff1f; 1. 更快的构建速度 Webpack5 在构建速度方面做出了一些改进&#xff0c;其中最重要的改进是使用持久性缓存。持久性缓存可以将中间结果存储在硬盘上&#xff0c;这些结果可以在下一次构建时被重用&#xff0c;从而减少了构建时间。此外&a…...

前端Vue

前端Vue 基础语法 <div id"div"><h1>This is a data:{{data}}</h1><h1>This is a method:{{method()}}</h1> </div><script>//创建vue实例需要传入配置对象,el指定一个元素作为容器,data保存需要的数据,methods定义函数…...

SpringCloud 分布式事务组件之Seata

目录 背景介绍什么是分布式事务什么叫做逆向补偿呢互联网最流行的分布式事务组件seata总结 背景 大家好&#xff0c;今天给大家分享一个在2022年出去面试Java几乎必问的一个技术&#xff0c;那就是seata。什么&#xff1f;&#xff1f;你才看了第一句话心里有闪现了无数个问…...

@TransactionalEventListener的使用和实现原理

一、问题描述 平时我们在完成某些数据的入库后&#xff0c;发布了一个事件&#xff0c;此时使用的是EventListener&#xff0c;然后在这个事件中&#xff0c;又去对刚才入库的数据进行查询&#xff0c;从而完成后续的操作。例如&#xff08;数据入库>对入库数据进行查询审核…...

没计算机基础,就是评职称用的,软考中级哪个好考啊?

那必须把系统集成项目管理工程师安排上&#xff01; 题目也不难&#xff0c;主要弄清楚47个过程的输入输出&#xff0c;还有工具的使用&#xff0c;几乎很多题都是按照这逻辑来的。 建议可以去网上、刷题APP上&#xff0c;多薅点资料和真题&#xff0c;集成是热门科目&#x…...

数字化战略,如何解读企业财务报表

01 财务数字化管理 第一&#xff0c;财务基本信息化建设。比如财务系统、财务共享中心等通过数字化的手段提升财务会计核算、财务流程管理效率&#xff0c;解决流程性管理的问题。 第二&#xff0c;利用各类商业智能 BI 分析、数据分析的手段把企业的所有行为都进行量化对比&…...

JAVA14新特性

JAVA14新特性 概述 Oracle在2020年3月17日宣布JAVA14 全面上市,JAVA14通过每六个个月发布一次新功能,为企业和开发人员社区提供增强功能,继续了Oracle加快创新的承诺. 最新的JAVA开发工具包提供了新功能,其中包括两项备受期待的新预览功能,实例匹配的匹配模式(JEP 305) 和记录…...

Google SEO优化的10大误区

以下是 Google SEO 优化的十大误区&#xff1a; 1、关键词堆砌&#xff1a; 过度使用关键词&#xff0c;使得内容不自然&#xff0c;难以阅读&#xff0c;同时也会被搜索引擎认为是垃圾信息&#xff0c;影响网站排名。 2、内容质量差&#xff1a; 质量差的内容会降低用户的体…...

.netCHARTING 10.5 dotnetcharting Crack

.net图表 10.5 为柱形图和条形图添加拐角半径控件。 5月 05&#xff0c; 2023 - 16&#xff1a;18新版本 特征 直角或直线组织连接线 - 默认情况下&#xff0c;通过以直角绘制组织连接线来增强组织连接线的显示方式。您可以使用直线选项更改此默认值&#xff0c;并直接在点…...

单元,集成,系统,验收,回归测试

测试流程 单元测试—集成测试–系统测试—验收测试 单元测试 通常由程序员自己来进行单元测试。程序员编写代码后&#xff0c;应该先自行进行单元测试&#xff0c;验证代码的正确性和质量。单元测试可以通过手动测试或自动化测试工具进行。 集成测试 集成测试&#xff1a;集成…...

云计算适合大专生学吗?

云计算适合大专生学吗&#xff1f; 对于大专毕业生来说&#xff0c;云计算的确是一个不错的选择&#xff0c;因为云计算技术应用专业&#xff0c;主要就是专科院校在办学。不管你是计算机相关专业的&#xff0c;还是零基础想学习都是可以的&#xff1b;原因就在于云计算这门专业…...

【系统集成项目管理工程师】项目风险管理

&#x1f4a5;十大知识领域&#xff1a;项目风险管理 项目风险管理包括以下 6 个过程: 规划风险管理识别风险实施定性风险分析实施定量风险分析规划风险应对控制风险 一、规划风险管理 定义如何实施项目风险管理活动的过程 输入工具与技术输出项目管理计划项目章程干系人登记册…...

Quartz2D之Path使用初步

我们直接看以下代码&#xff1a; // // MyQuartzView.m // QuartzTest // // Created by zenny_chen on 12-2-21. // Copyright (c) 2012年 GreenGames Studio. All rights reserved. //#import "MyQuartzView.h"// Quartz2D以及Core Animation所需要的头文件 #…...

Adobe考试

Adobe考试又称为Adobe国际认证和Adobe认证考试&#xff0c;Adobe国际认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。 Adobe考试覆盖了各种Adobe软件&#xff0c;包括Photoshop、Illustrator、InDesign、P…...

06 原创:华为破局(架构师级)- 分布式软总线的设备发现与P2P通信协议实现

原创&#xff1a;华为破局&#xff08;架构师级&#xff09;- 分布式软总线的设备发现与P2P通信协议实现 摘要 本文从分布式操作系统底层架构视角&#xff0c;深度拆解鸿蒙分布式软总线的核心设计理念、设备发现全流程机制、P2P通信协议栈实现与异构网络适配逻辑&#xff0c;…...

大模型Agent-应用小记【转载】

参考资料 万字长文解读LLM Agent&#xff1a;总体框架、经典论文与实践万字长文解析Agent框架中的上下文管理策略从Claude Code入手看Agent框架设计思路&#xff08;基础篇&#xff09; Agent基础 Agent基本定义 LLM 工具调用 / 长期记忆能力 / 规划能力 上下文管理 是什…...

【电池特征提取+SOH估计】基于PINN物理信息神经网络的锂电池SOH估计 Matlab代码(多输入单输出)

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f447; 关注我领取海量matlab电子书和数学建模资料&#x1f34a;个人信条&#xff1a;格物致知,完整Matl…...

个人情况随笔

自我介绍技术世界的探索者&#xff0c;一名对代码充满热情的初学者。虽然起步较晚&#xff0c;但始终相信编程是解决问题的艺术&#xff0c;而不仅仅是敲键盘。过往的经历或许与技术无关&#xff0c;但逻辑分析、团队协作和持续学习的能力&#xff0c;是无论哪个领域都通用的财…...

ArcMap10.4.1缓冲区分析避坑指南:解决距离单位混淆和叠加效果的常见问题

ArcMap 10.4.1缓冲区分析实战避坑手册&#xff1a;从原理到精准操作 第一次在ArcMap里做缓冲区分析时&#xff0c;我盯着屏幕上那些重叠的彩色圆圈发懵——明明设置了500米缓冲距离&#xff0c;为什么生成的区域看起来比隔壁城市的还大&#xff1f;后来才发现&#xff0c;我的数…...

2025届学术党必备的五大降重复率方案推荐榜单

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 想要切实有效地把文章的AI生成可能性降低下来&#xff0c;就要从语言组织以及内容编排这两个…...

TCT亚洲展|金属3D打印创新产品抢先看

本届TCT亚洲展有大量创新产品亮相&#xff0c;有的是概念产品&#xff0c;有的则已经被用于最终使用。本期内容&#xff0c;跟随3D打印技术参考&#xff0c;来探索部分创新应用。气液双向散热器概念设计这款产品由漫格科技与中科祥龙联合开发&#xff0c;是一件基于某真实项目的…...

考研学习C语言记录26.4.3

我是一名备考生&#xff0c;目前在准备27考研。其实C语言在之前的本科阶段有所学习&#xff0c;但由于当时本人对科目不够重视&#xff0c;再加毕业已经有段时间了&#xff0c;所以现在学习相当于从0开始。接下来我会在这个平台做一个阶段性的学习记录&#xff0c;记录一下自己…...

DNF 下载 RPM 依赖包及忽略特定依赖的方法

本文档详细说明如何使用 dnf命令下载 RPM 软件包及其依赖&#xff0c;以及在本地已存在自制 RPM 包的情况下&#xff0c;如何忽略特定依赖进行下载和安装。第一部分&#xff1a;DNF 命令下载 RPM 及其依赖包 适用于 RHEL / CentOS 8 / Rocky / Alma / Fedora 等系统。 1. 环境准…...

如何快速永久保存QQ空间历史说说?GetQzonehistory终极备份解决方案

如何快速永久保存QQ空间历史说说&#xff1f;GetQzonehistory终极备份解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否担心QQ空间里那些珍贵的青春记忆会随着时间流逝而消…...