class heap {
constructor() {
this.arr = [];
this.length = 0;
}
add(val) {
if (this.length == 0) {
this.arr.push(val);
this.length += 1;
}
else if (this.length > 0) {
this.arr.push(val);
var inex = this.arr.length - 1;
while (inex > 0) {
var check = Math.floor((inex - 1) / 2);
if (this.arr[inex] > this.arr[check]) {
var swap = 0;
swap = this.arr[check];
this.arr[check] = this.arr[inex];
this.arr[inex] = swap;
inex = check;
}
else if (this.arr[inex] < this.arr[check]) {
break;
}
}
}
console.log(this.arr)
}
}
const he = new heap();
he.add(14);
he.add(77);
he.add(88);
he.add(4);
he.add(100);
he.add(50);
he.add(78);
정리가 잘 된것을 볼수 있다.
array 마지막 수 를 맨 위로 보낸후 그 자리가 맞는지 확인하는 함수를 구현해보자
slide_down() {
var hey = this.arr.shift();
console.log(hey)
var list = this.arr[this.arr.length - 1];
this.arr.unshift(list);
this.arr.pop();
var index = 0;
while (true) {
if (index * 2 + 1 > this.arr.length - 1) {
break;
}
if (this.arr[index] < this.arr[index * 2 + 1] || this.arr[index] < this.arr[index * 2 + 2]) {
if (this.arr[index * 2 + 1] > this.arr[index * 2 + 2]) {
var hee = 0;
hee = this.arr[index * 2 + 1];
this.arr[index * 2 + 1] = this.arr[index];
this.arr[index] = hee;
index = index * 2 + 1;
}
else if (this.arr[index * 2 + 1] < this.arr[index * 2 + 2] || this.arr[index * 2 + 1] < this.arr[index * 2 + 1]) {
var heev = 0;
heev = this.arr[index * 2 + 2];
this.arr[index * 2 + 2] = this.arr[index];
this.arr[index] = heev;
index = index * 2 + 2;
}
}
else if (this.arr[index] > this.arr[index * 2 + 1] || this.arr[index] > this.arr[index * 2 + 2]) {
break;
}
}
console.log(this.arr)
}
}
const he = new heap();
he.add(14);
he.add(77);
he.add(88);
he.add(4);
he.add(100);
he.add(50);
he.add(78);
he.slide_down();
he.slide_down()
he.slide_down()
he.slide_down()
제대로 되는 것을 볼수 있다.