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语言之希尔排序的主要内容,如果未能解决你的问题,请参考以下文章
挖掘算法中的数据结构:O(n^2)排序算法之 选择插入冒泡希尔排序 及 优化
8种面试经典!排序详解--选择,插入,希尔,冒泡,堆排,3种快排,快排非递归,归并,归并非递归,计数(图+C语言代码+时间复杂度)