const swap = (arr, i, j) => {
const tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
const heapInsert = (arr , i) => { // 插入大根堆的插入算法
while(arr[i] > arr[Math.floor((i - 1) / 2]) {
swap(arr, i, Math.floor((i - 1) / 2);
i = Math.floor((i - 1) / 2;
}
}
const heapBigGenerate = arr => {
for(let i =0; i < arr.length; i++) {
headInsert(arr, i);
}
return arr;
}
// 得到大根堆中的最大值
const getHeapMax = arr => {
return arr[0];
}
// 删除大根堆中的最大值,保证删除后还是大根堆
const headify = (arr, idx, heapSize) => {
let left = idx * 2 + 1;
while (left < heapSize) {
const right = left + 1;
let largest = left;
if (right < heapSize && arr[right] > arr[left]) largest = right;
if (arr[idx] > arr[largest]) largest = idx;
if (idx === largest) break;
swap(arr, idx, largest);
idx = largest;
left = idx * 2 + 1;
}
};
【算法】大根堆
于 2022-09-07 10:53:04 首次发布