0
点赞
收藏
分享

微信扫一扫

堆排序

前程有光 2021-09-27 阅读 50

算法步骤

动图演示

复杂度

时间复杂度 = Ο(nlogn) 空间复杂度 = O(1)

代码实现

public static void sort1(int[] arr) {
        int len = arr.length;

        int step = 0;
        // (n-1)()
        while (step < len - 1) {

            //最高位保存最大值,要递减
            int maxNum = len - step;


            //堆顶点的个数
            int num = (int) ((maxNum - 1) / 2.0 + 0.5);
            if (num < 1) num = 1;

            for (int i = num; i >= 1; i--) {
                int x = i - 1;
                int y = 2 * i - 1;
                int z = 2 * i > maxNum - 1? - 1:2 * i;
                int max = y;
                if (z > 0 && arr[z] > arr[y]) {
                    max = z;
                }

                if (arr[max] > arr[x]) { 
                    RandomUtils.swap(arr,x,max);
                }
            }
            RandomUtils.swap(arr,0,maxNum - 1);
            step++;
        }
 }
举报

相关推荐

0 条评论