可以做动画的网站都有哪些软件,太湖县网站建设公司,一级网站建设,西安危机公关公司NodeJS实现堆排序算法
以下是使用 Node.js 实现堆排序算法的示例代码#xff1a;
// 堆排序函数
function heapSort(arr) {// 构建最大堆buildMaxHeap(arr);// 依次取出最大堆的根节点#xff08;最大值#xff09;#xff0c;并调整堆结构for (let i arr.length - 1; i… 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 函数对输入数组进行排序并输出结果。