NodeJS实现堆排序算法
以下是使用 Node.js 实现堆排序算法的示例代码:
// 堆排序函数
function heapSort(arr) {// 构建最大堆buildMaxHeap(arr);// 依次取出最大堆的根节点(最大值),并调整堆结构for (let i = arr.length - 1; i > 0; i--) {// 将当前根节点(最大值)与最后一个节点交换位置[arr[0], arr[i]] = [arr[i], arr[0]];// 调整堆,使剩余元素继续保持最大堆的性质heapify(arr, 0, i);}
}// 构建最大堆
function buildMaxHeap(arr) {const n = arr.length;// 从最后一个非叶子节点开始依次向上调整堆for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {heapify(arr, i, n);}
}// 调整堆
function heapify(arr, i, heapSize) {const left = 2 * i + 1; // 左子节点索引const right = 2 * i + 2; // 右子节点索引let largest = i; // 记录最大值的索引// 如果左子节点存在且大于当前节点,则更新最大值索引if (left < heapSize && arr[left] > arr[largest]) {largest = left;}// 如果右子节点存在且大于当前节点,则更新最大值索引if (right < heapSize && arr[right] > arr[largest]) {largest = right;}// 如果最大值索引不等于当前节点索引,则交换当前节点与最大值节点的值,并递归调整堆if (largest !== i) {[arr[i], arr[largest]] = [arr[largest], arr[i]];heapify(arr, largest, heapSize);}
}// 测试堆排序算法
const arr = [12, 11, 13, 5, 6, 7];
console.log('原始数组:', arr);heapSort(arr);
console.log('排序后的数组:', arr);
这段代码定义了三个函数:heapSort
用于执行堆排序,buildMaxHeap
用于构建最大堆,heapify
用于调整堆的结构以保持最大堆的性质。然后通过 heapSort
函数对输入数组进行排序,并输出结果。