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号下标用其他的书填充。
{
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号下标用其他的书填充。