希尔排序( 缩小增量排序 )

简介: 希尔排序( 缩小增量排序 )

希尔排序( 缩小增量排序 )

希尔排序本质上是插入排序的优化

希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成个
组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工
作。当到达=1时,所有记录在统一组内排好序

image.png

{
    int gap = n;
    while (gap > 1)
    {
        gap = gap / 3 + 1;
        for (int i = 0; i < n - gap; i+=gap)
        {

            int end = i;
            int tem = a[end + gap];
            while (end >= 0)
            {
                if (tem < a[end])
                {
                    a[end + gap] = a[end];
                    end -= gap;
                }    
                else
                    break;
            }
            a[end + gap] = tem;
        }
    }
}

希尔排序的特性总结

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就

会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

  1. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的

希尔排序的时间复杂度都不固定

数据结构(C语言版)》--- 严蔚敏

image.png

《数据结构-用面相对象方法与C++描述》--- 殷人昆

image.png

  1. 稳定性:不稳定
相关文章
|
算法
|
6月前
|
算法 编译器
【归并排序】两个有序序列的合并
【归并排序】两个有序序列的合并
|
7月前
|
存储 算法 搜索推荐
【算法训练-排序算法 三】【排序应用】合并区间
【算法训练-排序算法 三】【排序应用】合并区间
87 0
|
6月前
|
算法 Shell C语言
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
61 0
|
6月前
|
存储
原地去重问题和合并有序数组问题
原地去重问题和合并有序数组问题
25 0
|
7月前
|
存储 搜索推荐 算法
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(二)
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(二)
|
7月前
|
存储 搜索推荐 算法
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(一)
排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序(一)
|
存储 算法 PHP
PHPHashtable 如何优化数组查找和排序
PHP 是一种高度流行的编程语言,被广泛用于web开发。它有很多的优点,例如易于学习、跨平台、简单易用的语法等等。而在 PHP 中,数组是一种非常常用的数据结构,它可以存储一组有序的数据,方便我们进行各种操作。
67 0
【算法排序】直接插入排序
【算法排序】直接插入排序
【经典排序】插入与希尔排序
【经典排序】插入与希尔排序
69 0