插入排序详解

思路

把后面的值(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;
	}
}
相关推荐
txzrxz6 分钟前
图的存储
算法·深度优先·图论
Algebraaaaa8 分钟前
为什么线程阻塞要用.join而不是.wait
java·c++·python
Knight_AL11 分钟前
深入解析 JVM 垃圾回收算法:经典 vs 新型 GC 算法
jvm·算法
墨雪不会编程18 分钟前
C++内存管理深度剖析
java·开发语言·c++
万法若空31 分钟前
【wxWidgets教程】控件基础知识
c++·gui·wxwidgets·事件处理
就起这名行不行31 分钟前
一天训练即SOTA!LLaVA-1.5:多模态AI的“性价比之王”全解析
算法
yuer202535 分钟前
我把 GPT 当成 Runtime 用:只用一个客户端,跑一个可控、可审计的投资决策 DEMO
算法
鲅鱼饺子36 分钟前
PyTorch|BatchNorm 的两种方差
算法
栀秋66642 分钟前
面试常考的最长递增子序列(LIS),到底该怎么想、怎么写?
前端·javascript·算法
图形学爱好者_Wu44 分钟前
每日一个C++知识点|模板
c++