首页 / 堆排序小根堆
#
堆排序小根堆
#1129次浏览 7人互动
此刻你想和大家分享什么
2022-09-29 20:25
武汉理工大学 Java 点赞 评论 收藏
分享
小根堆排序堆排序求助大佬!!!
chinabrocc...:```java
public static void descendingSort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
swim(arr, i);
}
int size = arr.length;
swap(arr, 0, --size);
while (size > 0) {
sink(arr, 0, size);
swap(arr, 0, --size);
}
}
private static void swim(int[] arr, int i) {
while (i > 0 && arr[i] < arr[(i - 1) / 2]) {
swap(arr, i, (i - 1) / 2);
i = (i - 1) / 2;
}
}
private static void sink(int[] arr, int i, int n) {
while (2 * i + 1 < n) {
int left = 2 * i + 1;
int min = left;
min = left + 1 < n && arr[left] > arr[left + 1] ? min + 1 : min;
min = arr[i] <= arr[min] ? i : min;
if (min == i) return;
swap(arr, min, i);
i = min;
}
}
private static void swap(int[] arr, int i, int j) {
if (i != j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
}
```
点赞 评论 收藏
分享