C语言之希尔排序

Posted 遇见杉凡

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言之希尔排序相关的知识,希望对你有一定的参考价值。

1概念

希尔排序(Shell's Sort)是插入排序的一种又称”缩小增量排序“(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。


2基本思想

将要排序的一组数据按某个增量d分成若干组,每组中记录的下标相差d,对每组的全部元素进行排序,然后用一个较小的增量对它进行再次分组,并对每个新组重新进行排序。当增量减小到1的时候,整个要排序的元素被分为一组,排序完成。


3核心代码


void shell_sort(int data[], int len) {
    int h, i, j, temp;

    for (h = len/2; h > 0; h = h/2) { //控制增量 
        for (i = h; i < len; i++) {   //插入排序方式 
            // 取出当前位置i需要遍历比较的元素
            temp = data[i];
            // 从数组下标i-h至0逆向开始遍历比较,比较的元素间隔为h
            for (j = i-h; (j >= 0 && temp < data[j]); j -= h) {
                data[j+h] = data[j];
            }
            data[j+h] = temp;
        }
    }
}


4验证结果



从上面的源码及验证结果来分析,希尔排序就是把直接插入排序的增量1变为了h,在直接排序的外层再加入了一层增量依次降低一半的for循环,理解起来可能会稍微困难一点,所以我在网络上找了一张图帮助理解。



以上是关于C语言之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

C语言试题171之实现希尔排序算法

挖掘算法中的数据结构:O(n^2)排序算法之 选择插入冒泡希尔排序 及 优化

C语言程序设计C语言希尔排序算法!

C语言希尔排序算法

希尔排序的c语言实现代码

8种面试经典!排序详解--选择,插入,希尔,冒泡,堆排,3种快排,快排非递归,归并,归并非递归,计数(图+C语言代码+时间复杂度)