美文网首页
高级排序算法之希尔排序(缩小增量排序)

高级排序算法之希尔排序(缩小增量排序)

作者: 借缕春风绽百花 | 来源:发表于2020-10-28 11:34 被阅读0次

    排序原理:。

    ①选定一个增长量,以增长量作为数据分组的依据,对数据进行逻辑分组。
    ②多分组的数据按组进行插入排序。
    ③减小增长量,重复第二步操作,直到增长量为1。

    增长量的确定:

    int h = 1;
            while(h < a.length/2) {
                h = 2*h+1;
            }
    

    时间复杂度:

    最好情况:O(n)
    最坏情况:O(n^2)
    平均情况:O(n^1.3)

    空间复杂度:

    O(1)

    稳定性:

    不稳定

    实现:

    API设计:

    ①主排序算法用于排序
    public static void sort(int[] a)
    ② 比较API,用于比较两个元素大小
    private static boolean greater(int[] a,int v,int w)
    ③交换API,用于交换两个索引位置的值
    private static void exchange(int[] a,int i,int j)

    API实现:

        public static void sort(int[] a) {
            //1.确定增长量级
            int h = 1;
            while(h < a.length/2) {
                h = 2*h+1;
            }
            //希尔排序
            //1.找到要排序的元素
            for(int i = 0;i < a.length;i ++) {
                //2.将该元素与该组其他元素比较
                for(int j = i; j >= h;j-=h ) {
                    if(greater(a[i-h],a[i])) {
                        exchange(a,i-h,i);
                    }else {
                        break;
                    }
                }
            }
        }
       
        //greater方法用于获取两数最大值
        private static boolean greater(int v,int w) {
            if(v <= w)
               return false;
            else
                return true;
            
        }
        //exchange方法用于交换两个元素
        private static void exchange(int[] a,int i,int j) {
            int temp = 0;
            temp = (int) a[i];
            a[i] = a[j];
            a[j] = temp;
            
        }
    

    相关文章

      网友评论

          本文标题:高级排序算法之希尔排序(缩小增量排序)

          本文链接:https://www.haomeiwen.com/subject/pcpnmktx.html