【算法排序】直接插入排序

news/2024/12/30 1:56:00/

目录

  • 一、概念及其介绍
  • 二、过程图示
  • 三、复杂度以及稳定性
  • 四、代码实现

一、概念及其介绍

插入排序(InsertionSort),一般也被称为直接插入排序。
对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。
在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

二、过程图示

假设前面 n-1(其中 n>=2)个数已经是排好顺序的,现将第 n 个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。
按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。
从小到大的插入排序整个过程如图示:
第一轮: 从第二位置的 6 开始比较,比前面 7 小,交换位置。
在这里插入图片描述
第二轮: 第三位置的 9 比前一位置的 7 大,无需交换位置
在这里插入图片描述
第三轮: 第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。
在这里插入图片描述
第四轮: 第五位置的 1 比前一位置的 9 小,交换位置,再依次往前比较。
在这里插入图片描述

三、复杂度以及稳定性

  1. 时间复杂度O(n²)
  2. 空间复杂度O(1)
  3. 稳定性:相同元素的相对位置不变,如果两个元素相同,插入元素放在相同元素后面。是一种稳定排序。

四、代码实现

public class StraightInsertionSort {public static void main(String[] args){//定义一个待排元素数组Integer[] arr = {5,2,7,3,9,10,8,6,1,4};insertSort(arr);System.out.println("最终排序结果为"+Arrays.toString(arr));}//假设从小到大排序public static void insertSort(Integer[] arr){//寻找元素arr[i]合适的插入位置,i是当前元素for (int i = 1; i < arr.length; i++) {//记录待排元素的值int temp = arr[i];int position = i;//j是从i-1开始向前移动的,并且每次与arr[i]判断大小for (int j = i-1; j >= 0 ; j--) {//如果temp小于arr[j],就说明temp当前至少要插入到arr[j]的前面if(temp < arr[j]){//记录后移arr[j+1] = arr[j];position = j;}else {break;}}//插入到正确位置arr[position]=temp;//输出每一步排序的结果System.out.println("第"+i+"轮排序结果为"+Arrays.toString(arr));}}
}

http://www.ppmy.cn/news/93934.html

相关文章

linux消息队列总结

消息队列&#xff0c;是消息的链接表&#xff0c;存放在内核中。一个消息队列由一个标识符(即队列ID) 来标识 1、特点 &#xff08;1&#xff09;消息队列是面向记录的&#xff0c;其中的消息具有特定的格式以及特定的优先级 &#xff08;2&#xff09;消息队列独立于发送与接收…

使用C++调用Yolo模型的方法与步骤

目录 ## 1. 引言 ## 2. Yolo算法简介 ## 3. 准备工作 ## 4. 安装依赖库 ## 5. 下载Yolo模型权重文件 ## 6. 加载Yolo模型 ## 7. 图像预处理 ## 8. 目标检测与后处理 ## 9. 结果可视化 ## 10. 总结 ## 1. 引言 随着计算机视觉技术的不断发展&#xff0c;目标检测在许…

C语言工资纳税系统

工资纳税系统 个人所得税每月交一次&#xff0c;底线是1600元/月&#xff0c;也就是超过了1600元的月薪才开始计收个人所得税。个人所得税税率表一&#xff08;工资、薪金所得适用&#xff09; 级数----------全月应纳税所得额----------税率&#xff08;&#xff05;&#x…

Roblox 不但不支持 Linux,还屏蔽了 Wine

导读据悉&#xff0c;Roblox 不但不支持 Linux&#xff0c;还屏蔽了 Wine。 Roblox 不但不支持 Linux&#xff0c;还屏蔽了 Wine 多人游戏 Roblox 没有 Linux 原生版本&#xff0c;但之前可以通过 Wine 在 Linux 上运行。不过其最新的反作弊软件专门屏蔽了 Wine 应用&#xff…

如何从文档中提取结构化数据?parsio.io

parsio.io 产品名&#xff1a;Parsio电子邮件解析器 技术&#xff1a;采用人工智能技术的电子邮件解析器。 支持多种格式&#xff1a; 可以解析电子邮件和附件中的数据&#xff0c;包括PDF、HTML、XLSX&#xff08;Excel&#xff09;、CSV、DOCX、XML、TXT等格式。 提取模版&am…

新快报:十年聚焦,巨杉数据库打造中国基础软件的“原创力”

广东省级主流媒体新快报策划“非凡十年&#xff0c;广州答卷”专题&#xff0c;关注十年来广州的“原创力量”&#xff0c;作为土生土长的广州基础软件创新企业&#xff0c;巨杉数据库十年聚焦&#xff0c;从零打造原生分布式数据库&#xff0c;获得逾百家金融银行客户认可&…

图的拓扑排序AOV网,有向无环图DAG描述表达式,关键路径AOE网。

一&#xff0c;有向无环图DAG描述表达式 1.DAG 若一个有向图中不存在环&#xff0c;则称为有向无环图&#xff0c;记为DAG。 2.用二叉树描述表达式 3.用DAG描述表达式 用二叉树描述表达式有缺点&#xff0c;有些结点大可不必存储&#xff0c;可以共用。 step1:把各个操作数…

2023年ChatGPT商业版免授权源码/AI绘画/付费系统

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…