插入排序详解

思路

把后面的值(temp)与前面的值(end)做对比,

若temp位置的值小于end位置的值,

end位置的值给end+1位置。。

语言难以描述,请大家看下图。

代码

cpp 复制代码
void InsertSort(int *arr, int n)
{
	/*为了防止数组越界,我们最多访问到n-2就停止,
因为此时temp会赋值到n-1(数组的最后一个元素),
所以i<n-1即可*/
	for (int i = 0; i < n - 1; i++)
	{
		int end = i;
		int temp = arr[end + 1];

//注意是end>=0而不是end>0,因为下标为0与下标为1的值也需要比较
		while (end >= 0)
		{
			if (temp < arr[end])
			{
				arr[end + 1] = arr[end];
//end下标往数组前面走,继续下一次对比
				end--;
			}
//没有比temp大的值就终止本次循环
			else
			{
				break;
			}
		}
//前面没有比temp更小的值了,空出来的位置是end+1,temp的值就到这里来
		arr[end + 1] = temp;
	}
}
相关推荐
焜昱错眩..23 分钟前
代码随想录训练营二十六天| 654.最大二叉树 617.合并二叉树 700.二叉搜索树的搜索 98.验证二叉搜索树
数据结构·算法
笑口常开xpr27 分钟前
线 性 数 据 结 构 双 雄:栈 与 队 列 的 原 理、实 现 与 应 用
数据结构··队列
jndingxin30 分钟前
OpenCV CUDA模块中用于稠密光流计算的 TV-L1(Dual TV-L1)算法类cv::cuda::OpticalFlowDual_TVL1
人工智能·opencv·算法
geneculture40 分钟前
路径=算法=操作:复杂系统行为的统一数学框架
人工智能·算法·数学建模·课程设计·智慧系统·融智学的重要应用·复杂系统
AcrelGHP43 分钟前
建筑末端配电回路安全用电解决方案:筑牢电气防火最后一道防线
人工智能·算法·安全
Watink Cpper1 小时前
[灵感源于算法] 链表类问题技巧总结
数据结构·算法·链表
PassLink_3 小时前
AlgorithmVisualizer项目改进与部署-网页算法可视化
算法·编程·开源项目·本地部署·算法可视化·源码改进
GalaxyPokemon4 小时前
LeetCode - 2. 两数相加
java·前端·javascript·算法·leetcode·职场和发展
编程绿豆侠4 小时前
力扣HOT100之堆:347. 前 K 个高频元素
算法·leetcode·哈希算法
GalaxyPokemon6 小时前
归并排序:分治思想的高效排序
数据结构·算法·排序算法