码迷,mamicode.com
首页 > 编程语言 > 详细

排序(八)希尔排序

时间:2018-01-16 14:00:04      阅读:156      评论:0      收藏:0      [点我收藏+]

标签:div   http   span   代码实现   length   描述   alt   tle   分享图片   

参考文档:

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(1)
  • 稳定性:不稳定

 

排序(八)希尔排序

标签:div   http   span   代码实现   length   描述   alt   tle   分享图片   

原文地址:https://www.cnblogs.com/amei0/p/8295892.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!