Source: vga.heap.js

/**
                * Clase que representa un montículo 
                **/
               
               class Heap {
               
                   /**
                  * Crea un nuevo montículo
                  * @param {array} vector Array de elementos del montículo
                  * @param {number} contador Número de elementos del montículo
                  * @param {number} max Número máximo de elementos del montículo
                  * @constructor
                  */
               
                   constructor(){
                       this.vector = {};
                       this.contador = 0;
                       this.max = 100;
                   }
               
               
                    /**
                  * Indica si el montículo está vacío
                  * @returns si el contador es igual a 0
                  */
                   estaVacio() {
                       return this.contador == 0;
                     }
               
                   /** 
                  * Devuelve el número de elementos del montículo
                  * @returns número de elementos del montículo
                  */
                   getContador() {
                       return this.contador;
                   }
               
                  /**
                  * Flota un elemento del montículo para restaurar la propiedad del montículo
                  * @param {number} i Elemento a flotar
                  */
                   flotar(i)  {
               
                       while((i>1)&&(this.vector[Math.floor(i/2)]this.vector[i])) {
                               i = hd;
                           }
               
                           if((hi<=this.contador) && (this.vector[hi]>this.vector[i])) {
                               i = hi;
                           }
               
                           this.intercambiar (this.vector[p], this.vector[i]);
               
                       } while (p == i);
               
                   } 
                   
                   /**
                   * Inserta un elemento en el montículo
                   * @param {number} elemento Elemento a insertar
                   */
                   insertar(elemento) {
               
                       if (this.contador == this.max) {
                           console.log ("Error, montículo lleno");
                       }
               
                       else {
                           this.contador = this.contador + 1;
                           this.vector[this.contador] = elemento;
                           this.flotar(this.contador);
                       }
                   }
               
                   /** 
                  * Devuelve el primer elemento del montículo
                  * @returns Primer elemento del montículo
                  */
                   primero(){
               
                       if (this.contador == 0){
                           return "error";
                       }
               
                       else {
                           return this.vector[0];
                       }
               
               
                   }
               
                   /** 
                  * Extrae el primer elemento del montículo
                  * @returns Primer elemento del montículo
                  */
                   obtenerCima(){
               
                       var e;
               
                       if (this.contador != 0) {
               
                       e = this.vector[0];
                       this.vector[0] = this.vector[this.contador];
                       this.contador = this.contador -1;
                       this.hundir(0);
               
                           return e;
                       }
               
                       else {
                           return "error";
                       }  
               
               
                   }
               
                   /**
                   * Intercambia dos elementos del montículo
                   * @param {number} i Elemento a intercambiar
                   * @param {number} j Elemento a intercambiar
                   */
                   intercambiar(i,j){
               
                       var temp = 0;
                       temp = this.vector[i];
                       this.vector[i] = this.vector[j];
                       this.vector[j] = temp;
                   }
               
               
               }