zoukankan      html  css  js  c++  java
  • 排序之希尔排序

    希尔排序,因D.L.Shell于1959年提出而得名,核心思想:按照一定增量d,对比第i位元素和第i+d位元素。

    希尔排序应该算是在插入排序的基础上开发出来的排序算法。

    希尔排序是不稳定排序,时间复杂度为:希尔排序的时间复杂度是与选取的增量有关的,当选取的增量为1的时候,希尔排序就是插入排序时间复杂度为:O\left ( n^{2} \right );而Hibbard增量{1, 3, ..., 2^k-1}的希尔排序时间复杂度为:O\left ( n^{3/2} \right )

    图示:一开始取数组的一半,之后每次取d为原来的一半:

    C++代码:

    int shellSort(int *pArray, int len)
    {
        if (NULL == pArray || len < 1)
        {
           return 0;
        }
        int dk = len;
        int tmp = 0;
        int i = 0;
        int j = 0;
        do
        {
           dk = dk / 3 + 1;
           for (i = dk; i < len; i++)
           {
               if (pArray[i] < pArray[i - dk])
               {
                  tmp = pArray[i];
                  j = i - dk;
                  for (; j >= 0 && tmp < pArray[j]; j -= dk)
                  {
                      pArray[j + dk] = pArray[j];
                  }
                  pArray[j + dk] = tmp;
               }
           }
        } while (dk > 1);
        return 1;
    }

    归路近,扣舷歌,

    采真珠处水风多。

    曲岸小桥山月过,

    烟深锁,

    豆蔻花垂千万朵。

      -- 李珣 《南乡子·归路近》

  • 相关阅读:
    深入源码之JDK Logging
    随机数生成器
    简单日志LogHelper
    Xml、Json序列化
    Redis封装之Set
    Redis封装之Hash
    Redis封装之String
    Redis之创建
    AngularJS初接触
    简单缓存Cache
  • 原文地址:https://www.cnblogs.com/Bearoom/p/11721786.html
Copyright © 2011-2022 走看看