package Sort;
import java.util.Arrays;
/*堆排序 不稳定排序
时间复杂度: O(n*log n)
空间复杂度: O(1)
* */
public class heapSort {
public static void sort (int[] arr) {
createHeap(arr);
for (int i = 0; i < arr.length - 1; i++) {
swap(arr, 0, arr.length - i - 1);
shiftDown(arr, arr.length - i -1, 0);
}
}
private static void shiftDown(int[] arr, int heapLength, int index) {
int parent = index;
int child = 2 * parent + 1;
while (child < heapLength) {
if (child + 1 < heapLength && arr[child] < arr[child + 1]) {
child = child + 1;
}
if (arr[child] > arr[parent]) {
swap(arr, child, parent);
} else {
break;
}
parent = child;
child = 2 * parent + 1;
}
}
private static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
private static void createHeap(int[] arr) {
for (int i = (arr.length - 1 - 1) / 2; i >= 0; i--) {
shiftDown(arr, arr.length, i);
}
}
public static void main(String[] args) {
int[] arr = {9,5,2,7,3,6,8,5,2,7,3,6,8,5,2,7,3,6,8};
System.out.println(Arrays.toString(arr));
sort(arr);
System.out.println(Arrays.toString(arr));;
}
}