排序算法-Sort,更高效率的插入排序—希尔排序

Posted 数据结构与算法考研日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法-Sort,更高效率的插入排序—希尔排序相关的知识,希望对你有一定的参考价值。

基本思想:先将整个待排记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时再对全体记录进行一次直接插入排序。

子序列的构成不是简单的“逐段分割”,而是将相隔某个增量的记录组成一个子序列。对于这个“某个增量",初始时通常取k=n/2,然后依次取k=k/2,直至k为1表明最后一次会对整体记录进行一次直接插入排序



代码

比直接插入排序多了一个外层循环,思想可类比。
void shell_sort(int a[], int n){ int i,j,k, key; k = n / 2; while (k >= 1) { for (i = k; i < n; i++) //插入排序时,两个比较元素之间距离k { //在简单插入排序中两个比较元素距离为1 key = a[i]; j = i - k; while (key < a[j] && j >= 0) { a[j + k] = a[j]; j -= k; } a[j + k] = key; } k /= 2; }}

性能分析

时间复杂度
空间复杂度
稳定性
复杂性
平均
最坏
最好
O(nlogn)~O(n^2)
O(nlogn)~O(n^2)
O(1)
不稳定 较复杂
一般情况下希尔排序优于直接插入排序,但复杂度分析复杂,适合中等数据量大小的排序(上万的数据量),另外要注意希尔排序不稳定!

以上是关于排序算法-Sort,更高效率的插入排序—希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

深入希尔排序世界

Python | 深入希尔排序世界

希尔排序

手写希尔排序算法

算法:希尔排序

排序算法专题之希尔排序