插入排序详解

思路

把后面的值(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;
	}
}
相关推荐
liulilittle1 分钟前
网络编程基础算法剖析:从字节序转换到CIDR掩码计算
开发语言·网络·c++·算法·通信
Kent_J_Truman10 分钟前
【第几小 / 分块】
算法·蓝桥杯
搂鱼11451413 分钟前
sosdp
算法
艾醒33 分钟前
探索大语言模型(LLM):参数量背后的“黄金公式”与Scaling Law的启示
人工智能·算法
艾醒42 分钟前
探索大语言模型(LLM):使用EvalScope进行模型评估(API方式)
人工智能·算法
刀客1231 小时前
C++ 面试总结
开发语言·c++·面试
greentea_20131 小时前
Codeforces Round 65 B. Progress Bar(71)
c++·算法
序属秋秋秋1 小时前
《C++进阶之C++11》【智能指针】(下)
c++·笔记·学习·面试·c++11·智能指针·新特性
Mr.Ja1 小时前
【LeetCode热题100】No.1——两数之和(Java)
java·算法·leetcode
Mingze03142 小时前
考研408之栈与队列学习
开发语言·c++·学习·考研·算法