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

直接插入排序详解

直接插入排序

1 基本思想

直接插入排序是一种简单的插入排序法,其思想的关键就是将待排序的序列里的数一个个插入已经排序好的序列里面,直到未排序的序列数全部插入为止,从而得到一个新的排序好的序列

生活示例:
在这里插入图片描述
我们在打扑克牌将牌按大小顺序依次的排序的时候,我们抓来一张新的牌便根据我们手上已经排序好的牌依次从后面比较并插入合适位置,从而保持手中牌的有序性

2 直接插入排序动态图

在这里插入图片描述

我们可以从递归的角度来看待直接插入算法,你想让整个数组有序,那你就要让该数组前n-1个数有序,并将最后一个数从后面依次遍历这个大小为n-1的有序数组并插入其中,从而让整个数组有序。

3 直接插入排序代码实现
void InsertSort(int arr[], int size)
{int temp = 0;int end = 0;//定义一个排序好的数组最后一个下标for (int i = 0; i < size - 1; i++){end = i;temp = arr[end + 1];while (end >= 0){	if (arr[end] > temp){arr[end + 1] = arr[end];end--;}else{break;}}arr[end + 1] = temp;}
}

直接插入代码详解

第一部分:
int temp = 0;
int end = 0;//定义一个排序好的数组最后一个下标

temp用来保存待插入有序序列的元素,而end用来记录有序的序列的最后元素下标

第二部分

我们从有序序列只有一个元素,通过不断的循环插入,使数组最后有序,而变量i用来记录每一次进入有序序列的最后元素下标。而要插入数据的下标为i+1,所以最后一个元素插入有序数组的最后一个下标为size-2,所以循环条件为i < size - 1

for (int i = 0; i < size - 1; i++);
第三部分
while (end >= 0){	if (arr[end] > temp){arr[end + 1] = arr[end];end--;}else{break;}}arr[end + 1] = temp;

在这里插入图片描述
arr[end] > temp时先将end位置元素移动到后面元素位置arr[end + 1] = arr[end],并将end--从而遍历这个已经有序的数组,将它们依次与temp比较,如果arr[end] >temp不成立时则新加入元素temp应该在end+1的位置,循环的终止条件end>=0即遍历到第一个元素位置,如果跳出这个循环temp还没有插入数组中,那说明temp最小该插入第一个位置即下标为0的位置,即end+1(end此时为-1)。

4 直接插入排序时间复杂度分析
  • 最好时间复杂度为O(n),即数组一开始就是有序的
  • 最坏时间复杂度为O(n2)

排序元素越接近有序,直接插入排序算法时间效率越高。

http://www.dtcms.com/a/516269.html

相关文章:

  • 网站界面切片做程序宁波免费建站seo排名
  • Leetcode 33
  • 济南制作网站制作公司策划采购网有哪些平台
  • conda 换盘符
  • 统一身份认证、权限管理系统设计
  • 福州整站优化网站在线设计
  • 网站如何加入百度网盟重庆市住房和城乡建设厅官方网站
  • 批量删除多个 PDF 文件顶部和底部的文字说明
  • 专题:2025年制造业数智化发展白皮书:数字化转型与智能制造|附130+份报告PDF、数据、绘图模板汇总下载
  • Ubuntu 25.10 “Questing Quokka” 版本解析
  • iOS的动态库和静态库的差异区别
  • AI问答:为什么rust编译器不默认为struct添加#[derive(Debug)]而需要手动添加?
  • 如何正确选择住宅IP?解析适配跨境、流媒体的网络工具
  • 手机网站的文本排版是怎么做的做股东变更要上哪个网站
  • 算法沉淀第九天(Cinema Cashier)
  • 搭建属于自己的网站HEXO静态页(一)
  • [UE学习笔记]—划时代意义的两大功能—lumen和Nanite
  • 杭州协会网站建设公司怎样制作网站
  • Springboot音乐网站系统源码
  • 【css】overflow-x:visible失效:溢出时,想让横轴滚动,竖轴显示
  • 内含32位MCU的无线收发芯片XL2422
  • php开发网站怎么做可以做pos机的网站
  • Jupyter Notebook运行Milvus Lite
  • 双目测距实战5-立体矫正
  • 阿里云配置了加速器还是访问不了docker.io的解决方案。
  • 四川星星建设集团有限公司网站天津建设工程信息王
  • 网站创建人是网站下做二级域名
  • vivado综合报错,但没有明确报错信息
  • 深度解析 DeepSeek-OCR 的“光学压缩”革命
  • 贪心 --- 前篇