数组heapify变为堆结构

public class Heapify {

    public static void heapify(int[] arr) {
        int length = arr.length;
        for (int i = (length - 1) / 2; i >= 0; i--) {
            shiftDown(arr, i);
        }
    }

    //从索引为index的位置开始进行shiftdown操作
    private static void shiftDown(int[] arr, int index) {
        int length = arr.length;
        while (2 * index + 1 < length) {
            int left = 2 * index + 1;
            int largest = left;

            if (left + 1 < length && arr[left + 1] > arr[left]) {
                largest = left + 1;
            }
            
            if (arr[index] < arr[largest]) {
                swap(arr, index, largest);
            } else { 
                break;
            }
            index = largest;
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void main(String[] args) {
        int[] arr = {3, 7, 5, 4, 1, 7, 9, 8, 5, 2};
        heapify(arr);
        for (int i : arr) {
            System.out.print(i + " ");
        }
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 14:18
点赞 评论 收藏
分享
几个意思
Data_Seven:他笑话你 我忍不了 我去阿里了
点赞 评论 收藏
分享
09-17 10:53
四川大学 C++
点赞 评论 收藏
分享
今晚做笔试的还有机会约面吗?有听说后面做笔试的会被认为来华为的意愿度不是很高.....
ggrr:不会,华为笔试都要排队的。不是说想写就能发的。有的人投递晚了几天就排在后面写了。
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务