堆排序
package 堆排序;
public class 堆排序 {
public static void main(String[] args) {
int[] arr = { 1, 3, 5, 2, 6, 4, 8, 1 };
sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
}
private static void sort(int[] arr) {
int n = arr.length;
MinHeap(arr);
for (int i = n - 1; i >= 0; i--) {
swap(arr, 0, i);
MinHeapFixDown(arr, 0, i - 1);
}
}
private static void MinHeap(int[] arr) {
int n = arr.length;
for (int i = n / 2 - 1; i >= 0; i--) {
MinHeapFixDown(arr, i, n);
}
}
private static void MinHeapFixDown(int[] arr, int i, int n) {
int left = 2 * i;
int right = 2 * i + 1;
if (left >= n) {
return;
}
int min = left;
if (right >= n) {
min = left;
return;
} else {
min = arr[left] <= arr[right] ? left : right;
}
if (arr[i] > arr[min]) {
swap(arr, i, min);
MinHeapFixDown(arr, min, n);
}
}
private static void swap(int[] arr, int i, int min) {
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}