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 }