关闭

算法学习记录-希尔排序

15人阅读 评论(0) 收藏 举报

针对快速排序的优化,原理在快速排序前针对使数组内任意间隔为H的字数组是有序的,当H变化为1时直接为快速排序,大概的代码描述如下:

public class ShellSort {

    public static void sort(int[] a)
    {
        int N = a.length;
        int H = 1;
        while(H< 3/N)
        {
            H = 3*H+1;
        }
        
        while(H >= 1)
        {
            for (int i = H; i<N;i++) {
                for (int j = i; j > 0 && (a[j]<a[j-H]); j = j-H) {
                    swap(a[i], a[i-H]);
                }
            }
            H = H/3;
        }

    }

}

希尔排序的高效原因在于平衡了子数组的规模和有序性,希尔排序的时间复杂度与增量序列的选取有关,例如希尔增量时间复杂度为O(n²),而Hibbard增量的希尔排序的时间复杂度为O(

),希尔排序时间复杂度的下界是n*log2n。希尔排序没有快速排序算法快 O(n(logn)),因此中等大小规模表现良好,对规模非常大的数据排序不是最优选择。

算法效率取决于H 和H的变化因子,这个目前貌似没有定论,需要数学来论证。


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16次
    • 积分:10
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档