五大经典排序算法详解
排序是数据结构与算法中的基础内容,理解不同排序策略的适用场景对工程实践至关重要。下面我们将逐一剖析插入、希尔、冒泡、选择和堆排序这五种经典算法,结合代码实现与性能分析,帮你建立清晰的认知。
插入排序:构建有序序列
核心思想
插入排序的核心在于逐步构建有序序列。将数组分为'已排序'和'未排序'两部分,初始时已排序部分只包含第一个元素。每次从未排序部分取出一个元素,向前插入到已排序序列的正确位置。
这个过程就像整理扑克牌:你会把每一张新摸到的牌,插入到手中已排好序的牌堆里,最终让整副牌都有序。

代码实现
void InsertSort(int* a, int n) {
// 遍历未排序元素(从第 2 个元素开始)
for (int i = 1; i < n; i++) {
int end = i - 1; // 已排序部分末尾下标
int tmp = a[i]; // 保存当前待插入元素
// 向前查找合适位置,大于 tmp 则后移(此处为降序逻辑,升序需调整比较符)
while (end >= 0) {
if (a[end] < tmp) {
a[end + 1] = a[end]; // 元素后移腾位置
end--;
} else {
break; // 找到位置,退出循环
}
}
a[end + 1] = tmp; // 插入到正确位置
}
}
复杂度与稳定性
- 时间复杂度:最坏情况下为 O(N^2),但在数组已有序的情况下可优化至 O(N)。
- 空间复杂度:O(1),仅使用常数级辅助变量。
- 稳定性:稳定。相等元素的相对位置在排序前后保持不变。




