算法模版:
import java.util.Arrays;
public class 堆排序 {
static int[] arr;
//堆调整
static void Sift(int k, int last) {
int i, j, temp;
i = k;
j = 2 * i + 1;
while (j <= last) {
if (j < last && arr[j] < arr[j + 1]) j++;
if (arr[i] > arr[j]) break;//已经是堆
else {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i = j;
j = 2 * i + 1;
}
}
}
static void heapSort() {
int temp;
for (int i = (arr.length / 2) - 1; i >= 0; i--) {
//从最后一个分支节点至根节点进行调整
Sift(i, arr.length - 1);
}
for (int i = 1; i < arr.length; i++) {
temp = arr[0];
arr[0] = arr[arr.length - i];
arr[arr.length - i] = temp;
Sift(0, arr.length - 1 - i);
}
}
public static void main(String[] args) {
arr = new int[]{36, 30, 18, 40, 32, 45, 22, 50};
heapSort();
System.out.println(Arrays.toString(arr));
}
}