【算法】直接插入排序

目录

          • 1. 说明
          • 2. 举个例子
          • 3. java代码示例
          • 4. java示例截图

1. 说明
  • 1.直接插入排序的方式和打牌一样,刚开始数组为空
  • 2.拿到一个数字后从左到右将它与数组中的每一个数字进行比较,然后插入合适的位置
  • 3.到最后,数组按照既定的顺序排序好
2. 举个例子
  • 示例: [5, 3, 4, 1, 2]
  • 1. 获取数组的长度5,从第二个数开始循环操作
  • 2. 取下一个比较的值3,索引i为1,上一个索引j为0
  • 3.判断5是否大于3,则索引为1的数字改为5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循环
  • 4.将索引0的位置的数字改为3,得到[3, 5, 4, 1, 2]
  • 5. 取下一个比较的值4,索引i为2,上一个索引j为1 (索引0到索引j都是有序的)
  • 6. 比较索引1位置的数字,5大于4,将索引2位置的数字改为5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0
  • 7. 比较索引0位置的数字,3小于4,跳出循环
  • 8. 将索引1位置的数字改为4,得到[3, 4, 5, 1, 2]
  • 9. 取下一个比较的值1,索引i为3,上一个索引j为2 (索引0到索引j都是有序的)
  • 10. 比较索引2位置的数字,5大于1,将索引3位置的数字改为5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1
  • 11. 比较索引1位置的数字,4大于1,将索引2位置的数字改为4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0
  • 12. 比较索引0位置的数字,3大于1,将索引1位置的数字改为3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循环
  • 13. 将索引0位置的数字改为1,得到[1, 3, 4, 5, 2]
  • 14. 取下一个比较的值2,索引i为4,上一个索引j为3(索引0到索引j都是有序的)
  • 15. 比较索引3位置的数字,5大于2,将索引4位置的数字改为5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2
  • 16. 比较索引2位置的数字,4大于2,将索引3位置的数字改为4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1
  • 17. 比较索引1位置的数字,3大于2,将索引2位置的数字改为3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0
  • 18. 比较索引0位置的数字,1小于2,跳出循环
  • 19. 将索引1位置的数字改为2,得到[1, 2, 3, 4, 5]
3. java代码示例
package com.learning.algorithm.sort;/*** 直接插入排序* 示例: 5, 3, 4, 1, 2* 1.获取数组的长度5,从第二个数开始循环操作* ===开始循环===* 2.取下一个比较的值3,索引i为1,上一个索引j为0* 3.判断5是否大于3,则索引为1的数字改为5,得到 [5, 5, 4, 1, 2],j=j-1=-1,j<0跳出循环* 4.将索引0的位置的数字改为3,得到[3, 5, 4, 1, 2]* ===继续循环===* 5.取下一个比较的值4,索引i为2,上一个索引j为1 (索引0到索引j都是有序的)* 6.比较索引1位置的数字,5大于4,将索引2位置的数字改为5(往后挪一位),得到[3, 5, 5, 1, 2],j=j-1=0* 7.比较索引0位置的数字,3小于4,跳出循环* 8.将索引1位置的数字改为4,得到[3, 4, 5, 1, 2]* ===继续循环===* 9.取下一个比较的值1,索引i为3,上一个索引j为2 (索引0到索引j都是有序的)* 10.比较索引2位置的数字,5大于1,将索引3位置的数字改为5(往后挪一位),得到[3, 4, 5, 5, 2],j=j-1=1* 11.比较索引1位置的数字,4大于1,将索引2位置的数字改为4(往后挪一位),得到[3, 4, 4, 5, 2],j=j-1=0* 12.比较索引0位置的数字,3大于1,将索引1位置的数字改为3(往后挪一位),得到[3, 3, 4, 5, 2],j=j-1=-1,j<0跳出循环* 13.将索引0位置的数字改为1,得到[1, 3, 4, 5, 2]* ===继续循环===* 14.取下一个比较的值2,索引i为4,上一个索引j为3(索引0到索引j都是有序的)* 15.比较索引3位置的数字,5大于2,将索引4位置的数字改为5(往后挪一位),得到[1, 3, 4, 5, 5],j=j-1=2* 16.比较索引2位置的数字,4大于2,将索引3位置的数字改为4(往后挪一位),得到[1, 3, 4, 4, 5],j=j-1=1* 17.比较索引1位置的数字,3大于2,将索引2位置的数字改为3(往后挪一位),得到[1, 3, 3, 4, 5],j=j-1=0* 18.比较索引0位置的数字,1小于2,跳出循环* 19.将索引1位置的数字改为2,得到[1, 2, 3, 4, 5]*/
public class DirectInsertSort {public static void sort(int array[]) {// 获取数组的长度int length = array.length;// 从第二位开始比较for (int i = 1; i < length; ++i) {// 获取下一个比较的值int key = array[i];// 上一个索引int j = i - 1;// 比较到索引大于等于0的 且 遍历前面的值 与 key比较大小,如果比key大,大的值往后挪一位while (j >= 0 && array[j] > key) {// 比key大的值往后挪一位array[j + 1] = array[j];// 继续比较前面的值和key的大小j = j - 1;}// 当array[j]比key小,则array[j+1]的数字改为keyarray[j + 1] = key;}}/* A utility function to print array of size n*/public static void print(int[] array) {for (int i : array) {System.out.print(i + " ");}}public static void main(String args[]) {int array[] = {5, 3, 4, 1, 2};DirectInsertSort.sort(array);DirectInsertSort.print(array);}
}
4. java示例截图

在这里插入图片描述

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

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

相关文章

OpenCV基础篇

OpenCV基础篇 一、图像、视频读取二、cv::Mat()数据类型三、绘图功能四、鼠标响应事件五、图像像素读写六、图像像素运算七、颜色空间转换八、图像几何变换九、图像滤波十、图像二值化十一、图像梯度十二、Canny边缘检测十三、图像形态学十四、图像直方图十五、霍夫变换十六、分…

线程池的拒绝策略

文章目录 线程池的拒绝策略AbortPolicy拒绝策略&#xff1a;CallerRunsPolicy拒绝策略&#xff1a;DiscardOldestPolicy拒绝策略&#xff1a;DiscardPolicy拒绝策略&#xff1a; 线程池的拒绝策略 若在线程池当中的核心线程数已被用完且阻塞队列已排满&#xff0c;则此时线程池…

springboot_ssm_java学位论文盲审系统

本系统主要实现用户登录验证&#xff0c;用户使用邮箱&#xff0c;密码和选择身份进行登录&#xff0c;用户查看个人中心&#xff0c;提交论文&#xff0c;发表留言和问题反馈。用户在线注册。学生模块功能实现&#xff1a;学生注册&#xff0c;查看信息&#xff0c;修改资料&a…

智能优化算法应用:基于鱼鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鱼鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鱼鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鱼鹰算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

蓝桥杯航班时间

蓝桥杯其他真题点这里&#x1f448; //飞行时间 - 时差 已过去的时间1 //飞行时间 时差 已过去的时间2 //两个式子相加会发现 飞行时间 两段时间差的和 >> 1import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public cl…

Android蓝牙协议栈fluoride(四) - 设备管理(bt interface)

设备管理的接口实现了蓝牙的开/关、属性设置、发现设备、获取profile的接口等等。 接口声明 接口声明如下&#xff1a; // include/hardware/bluetooth.h typedef struct {// 打开接口并注册回调函数int (*init)(bt_callbacks_t* callbacks, bool is_atv);// 关闭接口void (…

目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】边缘检测

目录 知识储备 算法原理 边缘检测(Canny算子) Canny算子边缘检测流程 应用案例

[Linux] LAMP架构

一、LAMP架构架构的概述 LAMP 架构是一种流行的 Web 应用程序架构&#xff0c;它的名称是由四个主要组件的首字母组成的&#xff1a; Linux&#xff08;操作系统&#xff09;&#xff1a; 作为操作系统&#xff0c;Linux 提供了服务器的基础。它负责处理硬件资源、文件系统管理…

解读 | 阿里通义千问模型全尺寸开源 “诚意满满“背后的名与利

大家好&#xff0c;我是极智视界&#xff0c;欢迎关注我的公众号&#xff0c;获取我的更多前沿科技分享 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xff1a;https://t.zsxq.com/0aiNxERDq 12 月 1 日阿里开源…

基于Web和深度学习的辣椒检测产量预测系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 辣椒是一种重要的经济作物&#xff0c;被广泛种植和消费。然而&#xff0c;辣椒的产量预测一直是农业生产中的重要问题。准确地预测辣椒的产量可以帮助农民合理安…

第10节:Vue3 论点

如何在UniApp中使用Vue3框架创建论点&#xff1a; <template> <view> <text>{{ segments[currentSegment].content }}</text> </view> </template> <script> import { ref, computed } from vue; export default { setup…

高项备考葵花宝典-项目进度管理输入、输出、工具和技术(下,很详细考试必过)

项目进度管理的目标是使项目按时完成。有效的进度管理是项目管理成功的关键之一&#xff0c;进度问题在项目生命周期内引起的冲突最多。 小型项目中&#xff0c;定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切&#xff0c;可以视为一…

【论文笔记】FSD V2: Improving Fully Sparse 3D Object Detection with Virtual Voxels

原文链接&#xff1a;https://arxiv.org/abs/2308.03755 1. 引言 完全稀疏检测器在基于激光雷达的3D目标检测中有较高的效率和有效性&#xff0c;特别是对于长距离场景而言。 但是&#xff0c;由于点云的稀疏性&#xff0c;完全稀疏检测器面临的一大困难是中心特征丢失&…

vFW搭建IRF

正文共&#xff1a;2328字 40图&#xff0c;预估阅读时间&#xff1a;5 分钟 IRF&#xff08;Intelligent Resilient Framework&#xff0c;智能弹性架构&#xff09;技术通过将多台设备连接在一起&#xff0c;虚拟化成一台设备&#xff0c;集成多台设备的硬件资源和软件处理能…

C++如何通过调用ffmpeg接口对H265文件进行编码和解码

要对H265文件进行编码和解码&#xff0c;需要使用FFmpeg库提供的相关API。以下是一个简单的C程序&#xff0c;演示如何使用FFmpeg进行H265文件的编码和解码&#xff1a; 编码&#xff1a; #include <cstdlib> #include <cstdio> #include <cstring> #inclu…

两个月软考-高项上岸

文章目录 前言结缘软考功亏一篑有始有终2个月计划资料部分计划截图 总结 前言 我们看小说或者电视剧电影都会看到这样的情节&#xff0c;主角一开始锦衣玉食&#xff0c;突然家道中落&#xff0c;啥都没了&#xff0c;主角再一路奋起重新找回了属于自己的一切&#xff1b;还有…

Vue项目中实现浏览器标签页名字的动态修改

修改router/index.js文件 路由条目下面添加meta属性 meta:{title:DevOps运维平台 }示例 使用Vue的全局守卫函数beforeEach&#xff0c;在路由切换前动态修改浏览器标签页名字 router.beforeEach((to,from,next) > {document.title to.meta.titlenext() })

Error: Cannot find module ‘E:\Workspace_zwf\mall\build\webpack.dev.conf.js‘

执行&#xff1a;npm run dev E:\Workspace_zwf\zengwenfeng-master>npm run dev> mall-app-web1.0.0 dev E:\Workspace_zwf\zengwenfeng-master > webpack-dev-server --inline --progress --config build/webpack.dev.conf.jsinternal/modules/cjs/loader.js:983thr…

[笔记]ARMv7/ARMv8 交叉编译器下载

开发 Cortex-A7、Cortex-A72 或其他 ARM 架构 profile 芯片时&#xff0c;经常需要下载对应架构的交叉编译器&#xff0c;所以写这篇笔记&#xff0c;用于记录一下交叉编译器下载流程&#xff0c;免得搞忘。 编译环境&#xff1a;ubuntu 虚拟机 下载地址 我们可以从 ARM 官网…

09 视频分片上传Minio和播放

文章目录 一、流程设计1. 分片上传实现思路2. 文件分片上传流程3. 视频播放流程 二、代码实现1. 后端代码2. 文件上传前端代码3. 视频播放前端代码 一、流程设计 1. 分片上传实现思路 2. 文件分片上传流程 3. 视频播放流程 二、代码实现 1. 后端代码 pom.xml <dependenc…