public class SortTest {
public static void main(String[] args) {
int[] arr = new int[]{54, 78, 9, 90, 34, 79, 12};
heapSort(arr, arr.length);
System.out.println(Arrays.toString(arr));
}
public static void adjust(int[] arr, int start, int end) {
int tmp = arr[start];
int parent = start;
for (int left = parent * 2 + 1; left < end; left = left * 2 + 1) {
if (left < end && arr[left] < arr[left + 1]) {
left = left + 1;
}
if (tmp < arr[left]) {
arr[parent] = arr[left];
parent = left;
} else {
break;
}
}
arr[parent] = tmp;
}
public static void heapSort(int[] arr, int length) {
int start = (length - 2) / 2;
for (; start >= 0; start--) {
adjust(arr, start, length - 1);
}
if (length - 1 > 0) {//递归实现
int tmp = arr[length - 1];
arr[length - 1] = arr[0];
arr[0] = tmp;
heapSort(arr, length - 1);
}
/*for(int i = 0;i < arr.length-1; i++){//非递归实现
int tmp = arr[0];
arr[0] = arr[arr.length-1-i];
arr[arr.length-1-i] = tmp;
adjust(arr,0,arr.length-1-i-1);
}*/
}
}