选择排序,直接插入排序

news2025/3/11 6:29:17

目录

一、选择排序

1.基本思想

2.直接选择排序的流程  

3.实验

二、直接插入排序法 

1.基本思想

2.直接插入排序法的流程

3.实验 

三、反向排序

1.实验


 

一、选择排序

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

1.基本思想

指定排序位置与其它数组元素分别对比,如果满足条件就交换元素值,把满足条件的元素与指定的排序位置交换,这样排序好的位置会逐渐扩大,最后整个数组都成为以排序好的格式。与冒泡排序的区别在于,冒泡排序将相邻两个元素间的交换位置,而选择排序是将元素与指定排序位置交换。

2.直接选择排序的流程  

从小到大排序

  1. 在代排序的序列中定义第一个元素为最大元素。
  2. 将第一个元素与其他元素比较,当出现比第一个元素大的值,就将两者之间位置调换;比较结束后,第一元素位置就是最大值,然后将最大值与最后一位元素交换位置。
  3. 最大值确定后,依次比较第二大的元素,轮番比较后,数组就由小到大排序完成。

  

3.实验

#!/bin/bash

#定义函数
XUANZE() {
array=($@)
length=${#array[@]}
#外层循环控制元素比较的轮数,从1开始,最大轮数为数组长度-1
for ((i=1;i<length;i++))
do
  #定义最大元素的下标为0,即第一个元素最大
   a=0
  #内层循环控制与最大值比较的元素的下标,下标会随着轮数的提高而减少 
   for ((b=1;b<=length-i;b++))
   do 
      #比较元素大小    
      #if [ ${array[$a]} -gt ${array[$b]} ]  从大到小排序,就获取最小元素下标
      if [ ${array[$a]} -lt ${array[$b]} ]   从小到大排序,获取最大元素的下标
      then
        a=$b
      fi
   done
   #定义数组中最后一位元素的下标
   last=$[ length - i ]
   #将最后一位元素的值赋予变量tmp
   tmp=${array[$last]}
   #将最大元素的值赋予数组中最后一位
   array[$last]=${array[$a]}
   #将原本最后一位的值交换到第一位
   array[$a]=$tmp
done
echo "排序后的数组为:${array[@]}" 
}

###main###

read -p "输入需要排序的数组:" num
XUANZE $num

二、直接插入排序法 

1.基本思想

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

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

2.直接插入排序法的流程

从小到大排序

  1. 第一位元素设定为有序,
  2. 第二位元素与第一位元素比较,2号元素比1号元素小,二者位置交换,头两个元素变成有序;
  3. 第三位元素与前两个元素比较,比1号元素大就不执行操作,比2号元素小位置互换,如此前3个元素变为有序;
  4. 然后依次比较,直到数组中元素从小到大排列。

3.实验 

#!/bin/bash

CHARU() {
array=($@)
length=${#array[@]}
#外层循环控制比较轮数
for ((a=1;a<length;a++))
do
   #内层循环控制要插入元素的比较次数
   for ((b=0;b<a;b++))
   do
     #判断元素需要插入的位置,将待排序元素与已排序好的元素依次比较
     #if [ ${array[a]} -gt ${array[b]} ]  #较大的数向前排,较小的数向后排
     if [ ${array[a]} -lt ${array[b]} ]  #较小的数向前排,较大的数向后排
     then
        #将原有元素的值定义为变量tmp
        tmp=${array[a]}
        #将两个元素位置置换
        array[a]=${array[b]}
        array[b]=$tmp
     fi
   done
done
echo "排序后的数组值为:${array[@]}"
}

###main###

read -p "输入需排序的数组:" num
CHARU $num

三、反向排序

将原本排序好的数组反向排序,即原本从小到大排序,现在从大到小排。

1.实验

FANXIANG() {
   array=($@)
   length=${#array[@]}
   for ((a=0;a<length/2;a++))
   do
     tmp=${array[a]}
    #获取当前轮数的最后一个元素下标,下标会随着轮数的增加而减少
     last=$[length-1-a]
     array[$a]=${array[$last]}
     array[$last]=$tmp
   done
   echo "反向输出数组的值:${array[@]}"
}

###main###
read -p "输入一个数组:" num
FANXIANG $num
~                

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

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

相关文章

centos linux 配置私有网段并联网

文章目录 1. 创建虚拟机2. 虚拟机 A 配置网络3. 虚拟机 B 分配静态地址4. 测试 1. 创建虚拟机 vcenter 创建两台虚拟机A 、B&#xff0c;如何创建虚拟机请参考这里 虚拟机 A 具备两个网络接口&#xff0c;外网接口为 ens192 ip&#xff1a;192.168.22.6/20&#xff0c;网关为…

Golang tracing:与 OpenTelemetry、jaeger实现 跨服务 全链路追踪

使用 OpenTelemetry 链路追踪说明 工作中常常会遇到需要查看服务调用关系,比如用户请求了一个接口接口会调用其他grpc,http接口,或者内部的方法这样的调用链路,如果出现了问题,我们需要快速的定位问题,这时候就需要一个工具来帮助我们查看调用链路OpenTelemetry就是这样一个工…

Sui改进提案(SIPs)及其审核流程

SIPs提供了一个清晰透明的流程&#xff0c;使社区可以对Sui网络提出改进建议。 Sui基金会致力于打造一个开放协作的生态&#xff0c;因此推出了Sui改进提案&#xff08;SIPs&#xff0c;Sui Improvement Proposals&#xff09;&#xff0c;这是一个记录社区为去中心化未来的发…

如何利用API做好电商,接口如何凋用关键字

一.随着互联网的快速发展&#xff0c;电子商务成为了众多企业的首选模式&#xff0c;而开放API则成为了电商业务中不可或缺的部分。API&#xff08;Application Programming Interface&#xff09;&#xff0c;即应用程序接口&#xff0c;是软件系统不同组件之间交互的约定。电…

登录校验2.0

登录校验2.0 Filter Filter详解 过滤器Filter在使用中的一些细节&#xff0c;主要介绍一下3个方面的细节&#xff1a; 过滤器的执行流程过滤器的拦截路径配置过滤器链 执行流程 过滤器当中我们拦截到了请求之后&#xff0c;如果希望继续访问后面的web资源&#xff0c;就要…

内容编排与Kubernetes

第一节 内容编排与Kubernetes 为什么要用k8s 集群环境容器部署的困境&#xff0c;假设我们有数十台服务器。分别部署Nginx&#xff0c;redis&#xff0c;mysql&#xff0c;业务服务。如何合理的分配这些资源。这里就需要用到容器编排 容器编排 在实际集群环境下&#xff0…

线性结构-队列

队列是一种先进先出First In Fisrt Out,FIFO的线性表。 与一般的数组和链表不同&#xff0c;队列要求所有的数据只能从一端进入&#xff0c;从另一端离开。 输入进入的一端叫队尾rear&#xff0c;数据离开的一端叫队头front。 数据只能从队尾进入队列&#xff0c;从队头离开队…

VSCODE配置ROS编译环境

目录 一、安装插件 二、环境配置 2.1初始化工作空间 2.2配置VSCode 2.2.1创建功能包 2.2.2配置 c_cpp_properties.json 2.2.3配置 task.json 2.2.4配置 CMakeLists.txt 三、运行程序 3.1编译程序 3.2启动ros master 3.3执行可执行文件 用VSCode编辑ROS程序时&#xf…

linux 内核内存管理

物理内存 相关数据结构 page&#xff08;页&#xff09; Linux 内核内存管理的实现以 page 数据结构为核心&#xff0c;其他的内存管理设施都基于 page 数据结构&#xff0c;如 VMA 管理、缺页中断、RMAP、页面分配与回收等。page 数据结构定义在 include/linux/mm_types.h …

使用 Lambda 函数将 CloudWatch Log 中的日志归档到 S3 桶中

作者&#xff1a;SRE运维博客 博客地址&#xff1a;https://www.cnsre.cn/ 文章地址&#xff1a;https://www.cnsre.cn/posts/221205544069/ 相关话题&#xff1a;https://www.cnsre.cn/tags/aws/ 躺了好久&#xff0c;诈尸了。因为换了工作&#xff0c;所以比较忙一直没有时间…

解决APP抓包问题「网络安全」

1.前言 在日常渗透过程中我们经常会遇到瓶颈无处下手&#xff0c;这个时候如果攻击者从APP进行突破&#xff0c;往往会有很多惊喜。但是目前市场上的APP都会为防止别人恶意盗取和恶意篡改进行一些保护措施&#xff0c;比如模拟器检测、root检测、APK加固、代码混淆、代码反调试…

挖出api接口的重要性

作为一名软件开发者&#xff0c;API是我们工作中不可或缺的一部分。无论是将不同系统连接起来&#xff0c;还是构建多组件应用程序&#xff0c;API都是我们的核心工具之一。在本文中&#xff0c;我们将深入讨论API的技术细节和实际应用。 一.首先&#xff0c;我们来看看什么是…

怎么把mkv格式改成mp4?不妨试试这几种方法吧!

怎么把mkv格式改成mp4&#xff1f;mp4是一种多媒体封装格式&#xff0c;不过我们通常会将它说成是视频格式&#xff0c;它可以在一个文件中容纳无限数量的视频、音频、图片或字幕轨道&#xff0c;mp4格式也是被我们每个人所熟知&#xff0c;因为我们每个人几乎每天都会接触或者…

Spring入门教程

目录 一、Spring最基本的使用 1.创建Maven项目(不需要模板) 2.添加Spring框架支持 3.添加启动类(没啥可说的符合规范即可) 4.创建bean对象 5.将bean对象注册到Spring中 (a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件) (…

[ChatGPT] 从 GPT-3.5 到 GPT-5 的进化之路 | ChatGPT和程序员 : 协作 or 取代

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一键三连&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601;…

FastDFS总结

目录 概述 什么是分布式文件系统 核心概念 目录结构 上传机制 下载机制 Linux中搭建FastDFS 常用指令 SpringBoot整合FastDFS FastDFS集成Nginx 概述 FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件&#xff…

Android输入法不使用多客户端多屏适配-Android12

Android输入法不使用多客户端多屏适配-Android12 1、IME屏幕之间切换2、属性配置3、屏幕之间切换 IME 窗口 在非默认屏幕上运行的应用 1、IME屏幕之间切换 系统使用一个 IME&#xff0c;但可以在屏幕之间切换&#xff0c;以跟踪用户焦点。Android 10 默认所有第一方和第三方 IM…

【Android】试着写一个资讯界面(含不同板块)

跟着视频做的&#xff0c;并不能动脑子&#xff0c;于是自己顺一遍流程&#xff01;&#xff08;只阅读了部分教程&#xff0c;代码不完全相同&#xff09;&#xff08;仅为静态界面不含跳转&#xff09;&#xff08;在fragment上&#xff09;此为视频链接 成果图&#xff1a; …

07-HTML-链接标签

<a> 标签定义超链接&#xff0c;用于从一张页面链接到另一张页面。<a> 元素最重要的属性是 href 属性&#xff0c;它指示链接的目标。 属性值描述downloadfilename规定被下载的超链接目标。hrefURL规定链接指向的页面的 URL。pinglist_of_URLs规定以空格分隔的 UR…

YOLOv8 人体姿态估计(关键点检测) python推理 ONNX RUNTIME C++部署

目录 1、下载权重 ​2、python 推理 3、转ONNX格式 4、ONNX RUNTIME C 部署 1、下载权重 我这里之前在做实例分割的时候&#xff0c;项目已经下载到本地&#xff0c;环境也安装好了&#xff0c;只需要下载pose的权重就可以 2、python 推理 yolo taskpose modepredict model…