public class BuildMaxHeapProblem {
static int[] heap = {
80,
90,
32,
1,
40,
50,
45,
22,
12,
23,
33
};
static int largest;
static int left; //left child index
static int right; //right child index
static int temp;
public static void main(String[] args) {
buildMaxHeap();
for (int k: heap) {
System.out.print(k);
System.out.print(" ");
}
}
public static void buildMaxHeap() {
for (int p = heap.length / 2 - 1; p >= 0; p--) {
max_Heapify(p);
}
}
public static void max_Heapify(int p) {
left = leftChild(p);
right = rightChild(p);
if ((left < heap.length) && (heap[left] > heap[p]))
largest = left;
else largest = p;
if ((right < heap.length) && (heap[right] > heap[largest]))
largest = right;
if (largest != p) {
swap(largest, p);
max_Heapify(largest);
}
}
public static int leftChild(int k) {
return (2 * k + 1);
}
public static int rightChild(int i) {
return (2 * i + 2);
}
public static void swap(int a, int b) {
temp = heap[a];
heap[a] = heap[b];
heap[b] = temp;
}
}
No comments:
Post a Comment