当前位置: 面试刷题>> 堆化操作 (经典算法题500道)


### 题目描述补充 **题目:堆化操作** 给定一个数组(列表),要求将其转换为一个最大堆(或最小堆,根据题目要求而定)。堆是一种特殊的完全二叉树结构,其中每个父节点的值都大于或等于(对于最大堆)或小于或等于(对于最小堆)其所有子节点的值。数组中的元素按照层序遍历的顺序存储,即对于索引为i的元素,其左子节点的索引为2*i+1,右子节点的索引为2*i+2,父节点的索引为(i-1)/2(向下取整)。 **要求**: 1. 编写一个函数,该函数接受一个数组作为输入,并将其转换为最大堆(或最小堆)。 2. 给出PHP、Python、JavaScript的示例代码实现。 ### 示例代码 #### PHP 示例 ```php function heapify(&$arr, $n, $i) { $largest = $i; $left = 2 * $i + 1; $right = 2 * $i + 2; if ($left < $n && $arr[$left] > $arr[$largest]) { $largest = $left; } if ($right < $n && $arr[$right] > $arr[$largest]) { $largest = $right; } if ($largest != $i) { swap($arr, $i, $largest); heapify($arr, $n, $largest); } } function swap(&$arr, $i, $j) { $temp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $temp; } function buildMaxHeap(&$arr) { $n = count($arr); for ($i = floor(($n - 1) / 2); $i >= 0; $i--) { heapify($arr, $n, $i); } } // 示例 $arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]; buildMaxHeap($arr); print_r($arr); ``` #### Python 示例 ```python def heapify(arr, n, i): largest = i left = 2 * i + 1 right = 2 * i + 2 if left < n and arr[left] > arr[largest]: largest = left if right < n and arr[right] > arr[largest]: largest = right if largest != i: arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest) def buildMaxHeap(arr): n = len(arr) for i in range(n // 2 - 1, -1, -1): heapify(arr, n, i) # 示例 arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] buildMaxHeap(arr) print(arr) ``` #### JavaScript 示例 ```javascript function heapify(arr, n, i) { let largest = i; let left = 2 * i + 1; let right = 2 * i + 2; if (left < n && arr[left] > arr[largest]) { largest = left; } if (right < n && arr[right] > arr[largest]) { largest = right; } if (largest !== i) { [arr[i], arr[largest]] = [arr[largest], arr[i]]; heapify(arr, n, largest); } } function buildMaxHeap(arr) { let n = arr.length; for (let i = Math.floor(n / 2) - 1; i >= 0; i--) { heapify(arr, n, i); } } // 示例 let arr = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]; buildMaxHeap(arr); console.log(arr); ``` 码小课网站中有更多关于堆、数据结构与算法的相关内容分享给大家学习,欢迎访问码小课网站深入学习!
推荐面试题