首页 > 其他 > 详细

创建大顶堆

时间:2020-06-30 20:59:04      阅读:56      评论:0      收藏:0      [点我收藏+]
/*-----建造最大堆------*/ 
// 创建堆
function CreateHeap(MaxSize,MaxData,initialData) {
    this.MaxSize = MaxSize;
    this.Heap = initialData;
    if(!initialData) {
        this.Heap = new Array();   // 可以传入自定义数组 生成大顶堆
        this.Heap[0] = MaxData   // 定义" 哨兵 " 为大于堆中所有可能元素的值
    }
    this.BuildHeap = CreateHeap.BuildHeap
    this.PercDown = CreateHeap.PercDown
}
CreateHeap.PercDown = function(num) {
     let parent, child, element;
     element = this.Heap[num];
     for(parent=num; parent*2 + 1 <= this.Heap.length-1; parent=child) {
         child = parent*2 + 1;
         if((child != this.Heap.length-1) && (this.Heap[child] < this.Heap[child+1])) {
             child++
         }
         if(element > this.Heap[child]) {
             break;
         } else {
             this.Heap[parent] = this.Heap[child]
         }
     }
     this.Heap[parent] = element;
     console.log(this.Heap);

}
CreateHeap.BuildHeap = function() {
    let len = this.Heap.length - 2;   // 由于有 0 存在 ,所以减去2 来找到父节点
    for(let i=Math.floor(len / 2); i>=0; i--) {
        this.PercDown(i);
    }
}



let arr = [14,16,15,8,11,18,13]

let heap = new CreateHeap(8,1000,arr);
heap.BuildHeap()
console.log(heap.Heap);

 

创建大顶堆

原文:https://www.cnblogs.com/strivegys/p/13215831.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!