Skip to content

Commit 7283630

Browse files
authored
Max heap implementation (#157)
* Added MaxHeap implementation * Added MaxHeap implementation * Added MaxHeap implementation * Added MaxHeap implementation * Delete package-lock.json * Delete .gitignore
1 parent 47db056 commit 7283630

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

Data-Structures/Heap/MaxHeap.js

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Author: Samarth Jain
3+
* Max Heap implementation in Javascript
4+
*/
5+
6+
class BinaryHeap {
7+
constructor () {
8+
this.heap = []
9+
}
10+
11+
insert (value) {
12+
this.heap.push(value)
13+
this.heapify()
14+
}
15+
16+
size () {
17+
return this.heap.length
18+
}
19+
20+
empty () {
21+
return this.size() === 0
22+
}
23+
24+
// using iterative approach to reorder the heap after insertion
25+
heapify () {
26+
let index = this.size() - 1
27+
28+
while (index > 0) {
29+
const element = this.heap[index]
30+
const parentIndex = Math.floor((index - 1) / 2)
31+
const parent = this.heap[parentIndex]
32+
33+
if (parent[0] >= element[0]) break
34+
this.heap[index] = parent
35+
this.heap[parentIndex] = element
36+
index = parentIndex
37+
}
38+
}
39+
40+
// Extracting the maximum element from the Heap
41+
extractMax () {
42+
const max = this.heap[0]
43+
const tmp = this.heap.pop()
44+
if (!this.empty()) {
45+
this.heap[0] = tmp
46+
this.sinkDown(0)
47+
}
48+
return max
49+
}
50+
51+
// To restore the balance of the heap after extraction.
52+
sinkDown (index) {
53+
const left = 2 * index + 1
54+
const right = 2 * index + 2
55+
let largest = index
56+
const length = this.size()
57+
58+
if (left < length && this.heap[left][0] > this.heap[largest][0]) {
59+
largest = left
60+
}
61+
if (right < length && this.heap[right][0] > this.heap[largest][0]) {
62+
largest = right
63+
}
64+
// swap
65+
if (largest !== index) {
66+
const tmp = this.heap[largest]
67+
this.heap[largest] = this.heap[index]
68+
this.heap[index] = tmp
69+
this.sinkDown(largest)
70+
}
71+
}
72+
}
73+
74+
const maxHeap = new BinaryHeap()
75+
maxHeap.insert([4])
76+
maxHeap.insert([3])
77+
maxHeap.insert([6])
78+
maxHeap.insert([1])
79+
maxHeap.insert([8])
80+
maxHeap.insert([2])
81+
82+
while (!maxHeap.empty()) {
83+
const mx = maxHeap.extractMax()
84+
console.log(mx)
85+
}

0 commit comments

Comments
 (0)