数据结构基础:直接插入、希尔与选择排序详解
排序算法是数据结构的基石,不仅关乎代码效率,更体现了对数据组织规律的理解。本文将深入探讨三种经典排序算法:直接插入排序、希尔排序和选择排序,通过原理剖析、复杂度分析及 C 语言实现,帮助读者建立扎实的底层认知。
直接插入排序
算法原理
想象一下打扑克牌的过程:摸到第二张牌时,我们会将其插入到手中已排好序的牌堆中合适的位置。直接插入排序正是模拟这一过程,将数组分为有序区和无序区,每次从无序区取出一个元素,插入到有序区的正确位置。
实现步骤
- 默认第一个元素为有序区。
- 从第二个元素开始,依次与前面的有序元素比较。
- 若当前元素小于前一个元素,则后移前一个元素,继续向前比较。
- 找到合适位置后插入,重复直至所有元素有序。





复杂度分析
- 时间复杂度:
- 最好情况(已有序):O(n),只需比较一次。
- 最坏情况(逆序):O(n^2),每个元素都需要移动。
- 空间复杂度:O(1),原地排序,仅需常数级辅助变量。
- 稳定性:稳定排序。
代码实现
为了便于理解,我们先实现单次插入逻辑,再扩展至整体排序。
// tmp 是待插入元素,end 是当前比较元素的下标
int tmp = arr[i];
int end = i - 1;
while (end >= ) {
(arr[end] > tmp) {
arr[end + ] = arr[end];
end--;
} {
;
}
}
arr[end + ] = tmp;




