@@ -28,25 +28,13 @@ module.exports = class PriorityQueue {
2828
2929 insert ( value ) {
3030 const heap = this [ kHeap ] ;
31- let pos = ++ this [ kSize ] ;
31+ const pos = ++ this [ kSize ] ;
32+ heap [ pos ] = value ;
3233
3334 if ( heap . length === pos )
3435 heap . length *= 2 ;
3536
36- const compare = this [ kCompare ] ;
37- const setPosition = this [ kSetPosition ] ;
38- while ( pos > 1 ) {
39- const parent = heap [ pos / 2 | 0 ] ;
40- if ( compare ( parent , value ) <= 0 )
41- break ;
42- heap [ pos ] = parent ;
43- if ( setPosition !== undefined )
44- setPosition ( parent , pos ) ;
45- pos = pos / 2 | 0 ;
46- }
47- heap [ pos ] = value ;
48- if ( setPosition !== undefined )
49- setPosition ( value , pos ) ;
37+ this . percolateUp ( pos ) ;
5038 }
5139
5240 peek ( ) {
@@ -77,18 +65,37 @@ module.exports = class PriorityQueue {
7765 setPosition ( item , pos ) ;
7866 }
7967
68+ percolateUp ( pos ) {
69+ const heap = this [ kHeap ] ;
70+ const compare = this [ kCompare ] ;
71+ const setPosition = this [ kSetPosition ] ;
72+ const item = heap [ pos ] ;
73+
74+ while ( pos > 1 ) {
75+ const parent = heap [ pos / 2 | 0 ] ;
76+ if ( compare ( parent , item ) <= 0 )
77+ break ;
78+ heap [ pos ] = parent ;
79+ if ( setPosition !== undefined )
80+ setPosition ( parent , pos ) ;
81+ pos = pos / 2 | 0 ;
82+ }
83+ heap [ pos ] = item ;
84+ if ( setPosition !== undefined )
85+ setPosition ( item , pos ) ;
86+ }
87+
8088 removeAt ( pos ) {
8189 const heap = this [ kHeap ] ;
8290 const size = -- this [ kSize ] ;
8391 heap [ pos ] = heap [ size + 1 ] ;
8492 heap [ size + 1 ] = undefined ;
8593
86- if ( size > 0 ) {
87- // If not removing the last item, update the shifted item's position.
88- if ( pos <= size && this [ kSetPosition ] !== undefined )
89- this [ kSetPosition ] ( heap [ pos ] , pos ) ;
90-
91- this . percolateDown ( 1 ) ;
94+ if ( size > 0 && pos <= size ) {
95+ if ( pos > 1 && this [ kCompare ] ( heap [ pos / 2 | 0 ] , heap [ pos ] ) > 0 )
96+ this . percolateUp ( pos ) ;
97+ else
98+ this . percolateDown ( pos ) ;
9299 }
93100 }
94101
0 commit comments