zoukankan      html  css  js  c++  java
  • 排序(八)希尔排序

    参考文档:

    https://www.cnblogs.com/skywang12345/p/3597597.html

    算法描述:
          希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。
           希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

    下面以数列{80,30,60,40,20,10,50,70}为例,演示它的希尔排序过程
    第1趟:(gap=4)

    第2趟:(gap=2)

     第2趟:(gap=1)

    代码实现:

    public static void shellSort(int[] arr) {
            int n = arr.length;
            int i, j, gap;
            for (gap = n / 2; gap > 0; gap /= 2)// 步长
                for (i = 0; i < gap; i++) // 直接插入排序
                {
                    for (j = i + gap; j < n; j += gap)
                        if (arr[j] < arr[j - gap]) {
                            int temp = arr[j];
                            int k = j - gap;
                            while (k >= 0 && arr[k] > temp) {
                                arr[k + gap] = arr[k];
                                k -= gap;
                            }
                            arr[k + gap] = temp;
                        }
                }
        }

    算法分析:

    • 时间复杂度:O(N^1.3) 最好O(n) 最坏O(n2)
    • 空间复杂度:O(1)
    • 稳定性:不稳定
  • 相关阅读:
    编译预处理命令define
    共享数据的包含const
    友元类,友元函数
    静态成员static
    this 指针
    构造函数与析构函数
    c++类的基础
    void指针和const指针
    c++基础
    组播的实现
  • 原文地址:https://www.cnblogs.com/amei0/p/8295892.html
Copyright © 2011-2022 走看看