1 public class HeapSort {
2 public static void main(String[] args) {
3 int[] a = new int[]{6, 2, 8, 3, 5, 1, 8, 6, 54, 64, -1, 2, 4, 4, 67};
4 heapSort(a);
5 System.out.println();
6 }
7
8 static void heapSort(int[] a) {
9 int bounds = a.length;
10 for (int i = bounds - 1; i >= 0; i--) maxHeap(i, bounds, a);
11 while (bounds > 0) {
12 int t = a[0];
13 a[0] = a[bounds - 1];
14 a[bounds - 1] = t;
15 bounds--;
16 for (int i = bounds - 1; i >= 0; i--) maxHeap(i, bounds, a);
17 }
18 }
19
20 static void maxHeap(int r, int bounds, int[] a) {
21 int left = (r + 1) * 2 - 1, right = left + 1;
22 if (left >= bounds) return;
23 if (right >= bounds) {
24 if (a[left] > a[r]) {
25 int t = a[left];
26 a[left] = a[r];
27 a[r] = t;
28 maxHeap(left, bounds, a);
29 }
30 return;
31 }
32 if (a[left] > a[right]) {
33 int t = a[left];
34 a[left] = a[right];
35 a[right] = t;
36 }
37 if (a[right] > a[r]) {
38 int t = a[right];
39 a[right] = a[r];
40 a[r] = t;
41 maxHeap(right, bounds, a);
42 return;
43 }
44 }
45 }