插入排序-算法导论笔记
插入排序对于少量的数据它是一个有效的算法。插入排序的工作方式像人手里的扑克牌一样。开始时我们手里为空并且桌子上的牌面向下。然后我们每次从桌上拿走一张牌并将它插入手里正确的位置。为了把这种牌插入正确的位置,我们要从右到左将它和已在手中的牌进行比较。如下图:
伪代码:
INSERTION-SORT(A) {
for j = 2 to A.length {
key = A[j];
//Insert A[j] into the sorted sequence A[1...j-1]
i = j - 1;
while i > 0 and A[i] > key {
A[i+1] = A[i];
i = i - 1;
}
A[i+1] = key;
}
}
我们声明一个数组 a = {5,2,4,6,1,3},下标j指正拿到的牌”当前牌”。在for循环的每次迭代的开始,包含元素a[1…j-1]的子数组构成当前已排序好的牌,剩余子数组a[j+1…n]对应于仍在桌上的牌堆。事实上,元素a[1…j-1]就是在原来的位置1到j-1的元素;再把过程用图表示一下。
c语言代码实现:
InsertSort.c
#include <stdio.h>
void insertSort(int *a);
int main() {
int a[6] = { 5,2,4,6,1,3 };
insertSort(a);
int k;
for (k = 0; k < 6;k++) {
printf("%d ", a[k]);
}
getchar();
return 0;
}
void insertSort(int *a) {
int i, j,key;
//这里是从第二个元素开始的
for (j = 1; j < 6; j++) {
key = a[j];
//上一个元素
i = j - 1;
//数组下标0开始所以>=0
while (i >= 0 && a[i] > key){
a[i + 1] = a[i];
i = i - 1;
}
a[i + 1] = key;
}
}
- 需要注意的是和伪代码有点不一样,伪代码只是实现思想for (j = 1; j < 6; j++)这里是从数组第二个元素开始的,数组从0开始,所以是j = 1;while (i >= 0 && a[i] > key)这里也是因为数组是0开始的,所以是>=0。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现