algorighm/heap/base/逐个插入.js

36 lines
900 B
JavaScript

const numbers = [5, 0, 8, 2, 1, 4, 7, 2, 5, -1]; // 测试用例
const vaild = [-1, 0, 4, 2, 1, 8, 7, 5, 5, 2]; // 验证用例
/**
* 使用逐个插入法构造小顶堆
* @param {number[]} nums 需要处理的完全二叉树,用数组表示(层序遍历)
* @returns {number[]} 返回一个小顶堆的层序遍历
*/
function buildHeap(nums) {
const heap = [];
for (let i = 0; i < nums.length; i++) {
heap.push(nums[i]);
let cur = heap.length - 1;
let parent = Math.floor((cur - 1) / 2);
while (cur > 0 && heap[cur] < heap[parent]) {
[heap[cur], heap[parent]] = [heap[parent], heap[cur]];
cur = parent;
parent = Math.floor((cur - 1) / 2);
}
}
return heap;
}
function test(nums1, nums2) {
for (let i = 0; i < nums1; i++) {
if (nums1[i] !== nums2[i]) return false;
}
return true;
}
console.log(test(buildeap(numbers), vaild));