首页 > 编程语言 > 详细

shell排序及分析

时间:2019-05-31 17:58:52      阅读:106      评论:0      收藏:0      [点我收藏+]

对于大规模的数组,插入排序很慢,因为它只能交换相邻的元素,每次只能将逆序数量减少 1。希尔排序的出现就是为了解决插入排序的这种局限性,它通过交换不相邻的元素,每次可以将逆序数量减少大于 1。

希尔排序使用插入排序对间隔 h 的序列进行排序。通过不断减小 h,最后令 h=1,就可以使得整个数组是有序的。

public static void shellSort(int[] arr){
        int len = arr.length;
        for(int h=len/2;h>0;h/=2){
            for(int i = h;i<len;i++){
                for(int j = i;j>=h&&arr[j]<arr[j-h];j-=h){
                    int temp = arr[j];
                    arr[j]=arr[j-h];
                    arr[j-h]=temp;
                }
            }
        }
    }

希尔排序的运行时间达不到平方级别,使用递增序列 1, 4, 13, 40, ... 的希尔排序所需要的比较次数不会超过 N 的若干倍乘于递增序列的长度。

shell排序及分析

原文:https://www.cnblogs.com/earthhouge/p/10956564.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!