1 /** 2 * 堆排序 3 * 4 * @author Administrator 5 * 6 */ 7 public class HeapSort { 8 9 public int[] heapSort(int[] array) { 10 11 int i; 12 13 // 1.将无序序列构造成一个大顶堆 14 for (i = array.length / 2 - 1; i >= 0; i--) { 15 heapAdjust(array, i, array.length - 1); 16 } 17 18 // 2.交换堆顶元素与最后一个元素后,然后重新构造大顶堆,重复这个过程 19 for (i = array.length - 1; i > 0; i--) { 20 swap(array, 0, i); 21 heapAdjust(array, 0, i - 1); 22 } 23 24 return array; 25 } 26 27 28 public void heapAdjust(int[] array, int s, int m) { 29 30 int temp, j; 31 temp = array[s]; 32 33 for (j = 2 * s + 1; j <= m; j = j * 2 + 1) { 34 35 if (j < m && array[j] < array[j + 1]) { 36 ++j; 37 } 38 39 if (temp >= array[j]) { 40 break; 41 } 42 43 array[s] = array[j]; 44 s = j; 45 } 46 47 array[s] = temp; 48 } 49 50 public void swap(int[] array, int i, int j) { 51 52 int temp; 53 temp = array[i]; 54 array[i] = array[j]; 55 array[j] = temp; 56 } 57 }