希尔排序

希尔排序详解
本文介绍了希尔排序的基本原理及其算法实现过程。希尔排序是一种基于插入排序的高效算法,通过将待排序数组划分为多个子数组分别进行排序,从而提高排序效率。

希尔排序

 


  希尔排序:也叫作缩减增量排序,它通过比较相距一定间隔的元素来工作,各趟比较所用的距离随着算法的进行而缩小,直到只比较相邻元素的最后一趟排序为止。

  希尔排序使用一个序列h1,h2,...,ht,叫做增量排序,在使用增量ht的一趟排序之后,对于每一个i我们都有a[i] ≤ a[i + ht],所有相隔ht元素都被排序。此时称文件是ht排序的,如下图显示的是几趟希尔排序后数组的情况:

原始数组81941196123517952858417515
5 排序后35171128124175159658819495
3 排序后28121135154158179475819695
1 排序后11121517283541587581949596

  排序的作用就是对hk个独立的子数组执行一次插入排序。增量排序的一个流行的选择是使用Shell建议的序列:ht= N/2和hk = hk+1/2。算法如下:

    void shellSort(int[] a){
        int j;
        for(int gap = a.length /2; gap > 0; gap /=2){
            for(int i = gap; i < a.length; i++){
                int temp = a[i];
                for(j = i; j >= gap && temp < a[j - gap]; j-= gap)
                    a[j] = a[j - gap];
                a[j] = temp;
            }
        }
    }

  希尔排序的最坏情形运行时间为O(N2)。

转载于:https://www.cnblogs.com/zhanglei93/p/5545416.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值