public class Sort {
int[] a = {10, 1, 35, 61, 89, 36, 55};
void showArr(int[] a) {
for (int i = 0; i < a.length; i++) {
System.out.printf("%d ", a[i]);
}
System.out.println();
}
void swap(int[] a, int i, int j) {
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
}
int len;
void buildMaxHeap(int[] a) {
len = a.length;
for (int i = a.length/ 2-1; i >= 0; i--) {
heapify(a, i);
}
}
void heapify(int[] a, int i) {
int left = 2 * i + 1;
int right = 2 * i + 2;
int largest = i;
if (left < len && a[left] > a[largest])
largest = left;
if (right < len && a[right] > a[largest])
largest = right;
if (largest != i) {
swap(a, i, largest);
heapify(a, largest);
}
}
void HeapSort(int[] a) {
buildMaxHeap(a);
for (int i = a.length - 1; i > 0; i--) {
swap(a, 0, i);
len--;
heapify(a, 0);
}
}
public static void main(String[] args) {
Sort sort = new Sort();
sort.HeapSort(sort.a);
sort.showArr(sort.a);
}
}