九大经典算法之插入排序、希尔排序
01 插入排序(Insertion Sort)
原理:每次选择一个元素,并且将这个元素和整个数组中的所有元素进行比较,然后插入到合适的位置。
void insertion_sort(int arr[], int n) { int i,j; for (i = 1; i < n; i++) { int tmp = arr[i]; for (j = i; j > 0 && arr[j - 1] > tmp; j--) { arr[j] = arr[j - 1]; } arr[j] = tmp; } }
空间效率:O(1)
时间效率:最好情况:O(n) 平均情况:O(N^2) 最坏情况:O(N^2)
稳定性(相同元素相对位置变化情况):稳定
适用性:顺序存储的线性表
注:还有个折半插入排序,其原理就是查找插入位置时,从中间开始找起。
02 希尔排序(Shell Sort)
这个是插入排序的修改版,根据步长由长到短分组,进行排序,直到步长为1为止,属于插入排序的一种。
//希尔排序-希尔增量 void shell_sort(int arr[], int n) { int j; for (int d = n / 2;d > 0;d /= 2) { for (int i = d;i < n;i++) { int temp = arr[i]; for (j = i;j >= d && arr[j - d] > temp;j -= d) arr[j] = arr[j - d]; arr[j] = temp; } } }
//希尔排序-sedgewick增量 void shellsedgewick_sort(int arr[], int n) { int i, j, d, si; int Sedgewick[] = { 929, 505, 209, 109, 41, 19, 5, 1, 0 }; for (si = 0;Sedgewick[si] >= n;si++) ; for (;Sedgewick[si] > 0;si++) { d = Sedgewick[si]; for (i = d;i < n;i++) { int temp = arr[i]; for (j = i;j >= d && arr[j - d] > temp;j -= d) arr[j] = arr[j - d]; arr[j] = temp; } } }
空间效率:O(1)
时间效率:依赖于增量序列的函数 当n在一个特定范围内时,复杂度为O(^1.3) 最坏情况:O(N^2)
稳定性(相同元素相对位置变化情况):不稳定
适用性:顺序存储的线性表
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)