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

排序之希尔排序

时间:2019-01-20 20:05:09      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:bubuko   ima   方法   class   for   style   .com   序列   图片   

 

希尔排序

我们先在方法中找出它最大的间隔h,
第一趟,将要排序的一组数按增量h分成若干组,每组中记录的下标相差h,
对每组中全部元素进行排序。
第二趟,间隔为h = (h-1)/3,以后的每趟间隔都是h = (h-1)/3,
直到间隔变为1,整个要排序的数被分成一组,排序完成。

一般的初次取序列的一半为增量,以后每次减半,直到增量为1。

public class ShellSort {
    public static void shellSort(int[] arr) {
        //临时变量,储存当前元素
        int h = 1;
        //计算最大间隔
        while(h<arr.length/3) {
            h = h*3 + 1;
        }
        
        while(h>0) {
            int tmp = 0;
            for(int i = h;i<arr.length;i++) {
                tmp = arr[i];
                int j = i;
                while(j>h - 1&&arr[j-h]>=tmp) {
                    arr[j] = arr[j-h];
                    j -= h;
                }
                arr[j] = tmp;
            }
            //减少间隔
            h = ( h - 1) / 3;
        }
    }
}

技术分享图片

排序之希尔排序

标签:bubuko   ima   方法   class   for   style   .com   序列   图片   

原文地址:https://www.cnblogs.com/duy666/p/10295839.html

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