package 递归;
public class 最小堆 {
public static void main(String[] args) {
int[] arr={10,9,11,8,7,13,2,1,12};
MinHeap(arr);
for (int i : arr) {
System.out.print(i);
System.out.print(" ");
}
}
private static void MinHeap(int[] A) {
int n = A.length;
for (int i = n / 2 - 1; i >= 0; i--) {
MinHeapFixDown(A, i, n);
}
}
private static void MinHeapFixDown(int[] A, int tip, int n) {
//找到左右孩子
int left = 2 * tip + 1;
int right = 2 * tip + 2;
//左孩子已经越界,那tip就是子节点
if (left >= n) {
return;
}
int min = left;
if (right >= n) {
// min =left;
} else if (A[right] < A[left]) {
min = right;
}
//min指向左右孩子较小的那个
//与tip比较
if (A[tip] > A[min]) {
//交换
int temp = A[tip];
A[tip] = A[min];
A[min] = temp;
} else {
return;
}
//递归
MinHeapFixDown(A, min, n);
}
}
java算法之小顶堆
最新推荐文章于 2024-05-31 21:51:47 发布