【实现常见排序算法】直接插入排序的算法思想

一、基本思想

把待排序的数值按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的待排序的数值插入完为止,最后会得到一个新的有序序列。

这个过程与我们玩扑克牌发牌时对牌面的排序有异曲同工之妙。起初,我们只有一张牌,此时,这张牌的牌面就是我们手中最小的,随着第二轮发牌,我们将第二张牌面大小与第一张比较,大的话插在后面,小的话放在后面...以此类推。

例如下图:

二、实例:

(1)int a5 = {5,3,6,9,2,4};

end指向有序数列的最后一个位置(end=i(==0))。同时要注意,交换前要将aend+1进行备份tmp,以免被覆盖后找不到数值。假设当前有序数列为5,现在end指向5这个位置,end+1指向3这个位置,判断aend>tmp(3); 如果结果为true,end--,其中,挪数据同样需要一个循环,这样的话内层循环t条件就可以设定为end>=0,此时end<0,end+1==0,越界退出,将tmp赋值给aend+1,且i++。

(2)int a5 = {3,5,6,9,2,4};

end此时等于1,将end所指值与tmp比较,判断aend>tmp; 如果为true,end--,向前挪动数据,此时end=0,继续判断,以此类推,end--,此时end<0,越界退出,i++。

(3)int a5 = {3,5,6,9,2,4};

end此时等于2,......

如下是AI对于上述我的语言进行的总结2333:

插入排序的关键操作说明:

有序数列的边界处理

  • 变量end始终指向当前有序部分的最后一个元素位置。例如初始时end=0(假设数组第一个元素已有序),此时end+1指向待插入元素的位置。
  • 在插入前需将a[end+1]的值备份到tmp,避免后续移动元素时被覆盖。

元素移动与插入逻辑

  • 比较阶段:若a[end] > tmp(待插入值),则将a[end]向后移动一位,并通过end--向前检查有序部分的其他元素。
  • 终止条件:移动循环需满足end >= 0。当end减至-1时,说明tmp应插入数组首位,此时end+10,不会越界。
  • 插入操作:退出循环后将tmp赋值给a[end+1],完成插入。随后i++进入下一轮排序。

示例流程 有序数列为[5],待插入值为3

  1. end=0tmp=3(备份a[1]
  2. 比较5 > 3,移动5a[1]end变为-1
  3. 循环终止,将3插入a[0](因end+1=0
  4. 更新后的数列为[3,5],进入下一轮迭代

三、代码实现:

cpp 复制代码
void InserSort(int* arr, int n)
{
	for(int i=0;i<n-1;i++)
//end可以等于n吗?不可以,因为等于n时,end指向有序数组中的最后一个数据,
//指向n时说明已经没有待插入数据了,且此时end+1越界,故end最大等于n-1

	{
		int end = i;
		int tmp = arr[end + 1];
		while (end >= 0)
		{
			if (arr[end] > tmp)
			{
				arr[end+1] = arr[end];
				end--;
			}
			else {
				break;
			}	
		}
		arr[end+1] = tmp;//前面一直在判断,跳出while循环后赋值
	}
}

//加油加油!

相关推荐
金幄科技1 小时前
RAG第四篇:重排序 Rerank——粗召回之后,为什么还需要一次精排
人工智能·算法·ai·ai编程
M78佐菲1 小时前
Linux学习笔记:文件IO
linux·笔记·学习·算法
lhldsg2 小时前
课程排课系统实战指南:从数据库设计到算法调优全流程解析
java·数据库·算法·小程序
BSD_HY2 小时前
薄膜开关矩阵扫描电路设计中的防鬼键措施
人工智能·算法·矩阵·人机交互·薄膜开关·源头工厂·深圳工厂
linux-hzh2 小时前
百日算法修炼 · Day 17
数据结构·算法
XUEYUAN52122 小时前
代理日志分析与监控:代理池健康状态巡检与分级告警体系搭建(运维实战)
运维·网络·网络协议·tcp/ip·算法·架构
sel_92 小时前
【多轮对话论文导读(七)】多轮对话论文阅读笔记:从数据生成、用户模拟到上下文重构与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·语言模型·自然语言处理
远游客07132 小时前
为什么用「年×100+月」做比较
算法·gin
leavesleo3 小时前
DeepSeek 偷偷给你取外号?拆一下 AI 人格化背后的技术
算法
liliangcsdn3 小时前
skewness收益偏度取负因子背后逻辑的探索
人工智能·算法·机器学习