堆排序-minHeapFixDown的递归和迭代形式

发布时间:2025-12-09 22:23:27 浏览次数:5

minHeapFixDown的递归和迭代形式

// 把以i为根节点的二叉堆调整成小顶堆public static void minHeapFixDown(int[] arr, int i, int n) {// 找到左右孩子int left = 2 * i + 1;int right = 2 * i + 1;// 找到左右孩子中的最小孩子// 左孩子越界,右孩子必越界,根节点为叶子节点,此为递归出口if (left >= arr.length) {return;}int min = left;// 只有左孩子if (left == arr.length - 1) {} else {if (arr[left] > arr[right]) {min = right;}}// 如果根节点比左右孩子都要小,不用调整// 否则选取左右孩子中最小的节点,与根节点交换// 对选取的孩子节点,以其为根节点对二叉堆进行递归调整if (arr[i] <= arr[min]) {return;} else {swap(arr, i, min);i = min;// 移动根minHeapFixDown(arr, i, n);}} // 迭代形式的siftDownpublic static void siftDown(int[] arr, int i, int n) {int left = 2 * i + 1;while (left < n) {int right = left + 1;int min = left;if (right < n && arr[left] > arr[right]) {min = right;}if (arr[i] <= arr[min]) {// 无需调整break;}swap(arr, i, min);i = min;left = 2 * i + 1;}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477