建立最大堆—数组—Java

来源:互联网 发布:java微信退款接口开发 编辑:程序博客网 时间:2024/05/21 21:36
public class BuildMaxHeap
{
    public static void MaxHeapify(int[] a, int i)
    {
        int largest = 0;
        int l = i << 1;
        int r = (i << 1) + 1;
        if (l < a.length && a[l] > a[i])
        {
            largest = l;
        }
        else{
            largest = i;
        }
        if (r < a.length && a[r] > a[largest])
        {
            largest = r;
        }
        if (largest != i)
        {
            int tmp = a[i];
            a[i] = a[largest];
            a[largest] = tmp;
            MaxHeapify(a, largest);
        }
    }
    public static void BuildMaxHeap(int[] a)
    {
        for (int i = (a.length-1) / 2 ; i > 0; --i)
        {
            MaxHeapify(a, i);
        }    
    }
    public static void main(String[] args)
    {
        int[] a = {0, 4, 1, 3, 2, 16, 9, 10, 14, 8, 7};
        BuildMaxHeap(a);
        for (int tmp : a)
        {
            System.out.println(tmp);
        }
    }
}

得注意数组第一个元素必须从下标1开始,故数组0号下标用其他的书填充。
0 0
原创粉丝点击