Chapter 6 - Heap Java |
Document last modified: |
Note that for compatibility with the text use of arrays starting at index 1, array index 0 is not used.
public class Heap {
static int heapsize;
public static void main(String a[]) {
int A[] =
{0,4,1,3,2,16,9,10,14,8,7};
heapsize=A.length-1;
Build_Max_Heap(A);
print(A);
}
static void print(int A[]) {
for (int i=1; i<=A.length-1;
i++) System.out.print(A[i]+" ");
System.out.println();
}
static int parent(int i) { return i/2; }
static int left( int i ) { return 2*i; }
static int right( int i ) { return 2*i+1; }
static void exchange(int A[], int i, int j) {
int t = A[i];
A[i]=A[j];
A[j]=t;
}
//@ pre A != null;
//@ post (\forall int j; 1<=j && j < A.length; A[ j ] >= A[left( j )] && A[ j ]
>= A[right( j )]);
static void Build_Max_Heap(int A[]) {
heapsize=A.length-1;
/*@ loop_invariant
(\forall int j; i<j && j<=A.length;
A[ j ] >= A[left( j )] && A[ j ] >= A[right( j )]);
@*/
for(int
i=heapsize/2; i>=1; i--) Max_Heapify(A, i);
}
// Recursive
static void Max_Heapify(int A[], int i) {
int l =
left(i);
int r =
right(i);
int largest =
i;
if( l <=
heapsize && A[l] > A[i]) largest = l;
if( r <= heapsize && A[r] > A[largest]) largest = r;
if( largest != i ) {
exchange(A, i, largest);
Max_Heapify(A, largest );
}
}
}