java算法之小顶堆

it2023-06-12  68

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); } }
最新回复(0)