牛客华为机试题库【题号 HJ开头】(重点看)
牛客在线编程算法篇【题号NC开头】
剑指offer【题号 JZ开头】
力扣
1)原题链接
2)已有题解
3)代码
/**
* 降序排序
*/
public static void heapSort1(int[] arr) {
// 无序数组构造成二叉堆
System.out.println("原始数据:" + Arrays.toString(arr));
for (int i = (arr.length - 1) / 2; i >= 0; i--) {
bigDown1(arr, i, arr.length);
}
System.out.println("下沉构建最小二叉堆:" + Arrays.toString(arr));
for (int i = arr.length - 1; i > 0; i--) { // i=0会出错,会把值清零
arr[0] = arr[0] ^ arr[i];
arr[i] = arr[0] ^ arr[i];
arr[0] = arr[0] ^ arr[i];
bigDown2(arr, 0, i); // 把i作为右边界
}
}
/**
* 降序排序
*/
public static void heapSort2(int[] arr) {
// 无序数组构造成二叉堆
System.out.println("原始数据:" + Arrays.toString(arr));
for (int i = (arr.length - 1) / 2; i >= 0; i--) {
bigDown1(arr, i, arr.length);
}
System.out.println("下沉构建最小二叉堆:" + Arrays.toString(arr));
for (int i = arr.length - 1; i >= 0; i--) {
int temp = arr[i];
arr[i] = arr[0];
arr[0] = temp;
bigDown2(arr, 0, i);
}
}
int[] arr222 = {1, 3, 2, 9, 5, 7, 8, 6, 10, 0};
heapSort1(arr222);
System.out.println("二叉堆排序:" + Arrays.toString(arr222));
int[] arr2222 = {1, 3, 2, 9, 5, 7, 8, 6, 10, 0};
heapSort1(arr2222);
System.out.println("二叉堆排序:" + Arrays.toString(arr2222));
原始数据:[1, 3, 2, 9, 5, 7, 8, 6, 10, 0]
下沉构建最小二叉堆:[0, 1, 2, 6, 3, 7, 8, 9, 10, 5]
二叉堆排序:[10, 9, 8, 7, 6, 5, 3, 2, 1, 0]
原始数据:[1, 3, 2, 9, 5, 7, 8, 6, 10, 0]
下沉构建最小二叉堆:[0, 1, 2, 6, 3, 7, 8, 9, 10, 5]
二叉堆排序:[10, 9, 8, 7, 6, 5, 3, 2, 1, 0]