插入排序详解

思路

把后面的值(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;
	}
}
相关推荐
曼巴UE52 分钟前
UE 客户端 需要的网络同步概念总结
网络·c++·ue5
『昊纸』℃13 分钟前
C语言学习心得集合 篇1
c语言·算法·编程基础·学习心得·实践操作
云深麋鹿14 分钟前
C++ | 继承
开发语言·c++
小辉同志19 分钟前
Epoll+线程池
开发语言·c++·c·线程池·epoll
史迪仔011219 分钟前
[QML] Qt Quick Dialogs 模块使用指南
开发语言·前端·c++·qt
Chase_______19 分钟前
LeetCode 1456:定长子串中元音的最大数目
算法·leetcode
小O的算法实验室20 分钟前
2026年IEEE IOTJ,DNA序列启发相似性驱动粒子群算法+无人机与基站部署,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
谭欣辰20 分钟前
Floyd算法:动态规划解最短路径
c++·算法·图论
计算机安禾20 分钟前
【Linux从入门到精通】第12篇:进程的前后台切换与信号控制
linux·运维·算法
6Hzlia23 分钟前
【Hot 100 刷题计划】 LeetCode 84. 柱状图中最大的矩形 | C++ 两次单调栈基础扫法
c++·算法·leetcode