public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array={-1,27,17,3,16,13,10,1,5,7,12,4,8,9,0,100};
heapsize=array.length;
print(array);
biuldMaxHeap(array);
print(array);
heapSort(array);
print(array);
}
public static void heapSort(int[] a){
biuldMaxHeap(a);
int temp;
for(int i=a.length-1;i>1;i--){
temp=a[1];
a[1]=a[i];
a[i]=temp;
heapsize--;
maxHeapify(a, 1);
}
}
public static void biuldMaxHeap(int[] a){
heapsize=a.length;
for(int i=a.length/2;i>0;i--)
maxHeapify(a, i);
}
public static void maxHeapify(int[] a, int i){
int l=left(i);
int r=right(i);
int largest=0;
int temp;
if(l<heapsize&&a[l]>a[i])
largest=l;
else
largest=i;
if(r<heapsize&&a[r]>a[largest])
largest=r;
if(largest!=i){
temp=a[i];
a[i]=a[largest];
a[largest]=temp;
maxHeapify(a, largest);
}
public static void print(int[] a){
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
public static int left(int i){
return i*2;
}
public static int right(int i){
return i*2+1;
}
public static int parent(int i){
return i/2;
}
}