@@ -44,6 +44,11 @@ function isDownHeapkExpanded() {
44
44
return areExpanded ( [ 'BuildHeap' , 'DownHeapk' ] ) ;
45
45
}
46
46
47
+ // i, j (in sort) displayed only if second DownHeap is expanded
48
+ function isDownHeap1Expanded ( ) {
49
+ return areExpanded ( [ 'SortHeap' , 'DownHeap1' ] ) ;
50
+ }
51
+
47
52
export default {
48
53
initVisualisers ( ) {
49
54
return {
@@ -133,7 +138,6 @@ export default {
133
138
134
139
chunker . add ( 4 , ( vis , index1 , index2 ) => {
135
140
vis . array . assignVariable ( 'k' , index1 ) ;
136
- // if (tmp != null) { // XXX looks dodgy using tmp here?
137
141
if ( index2 != null ) {
138
142
unhighlight ( vis , index2 ) ;
139
143
vis . array . removeVariable ( 'j' ) ;
@@ -174,40 +178,44 @@ export default {
174
178
// parent is greater than largest child, so it is already a valid heap
175
179
if ( A [ i ] >= A [ j ] ) {
176
180
heap = true ;
177
- chunker . add ( 15 , ( vis , index , lastH ) => {
181
+ chunker . add ( 15 , ( vis , index , lastH , cur_k ) => {
178
182
unhighlight ( vis , index , false ) ;
179
183
// possible last chunk in BuildHeap/DownHeapk
180
184
// remove i, j if !isDownHeapkExpanded
181
185
if ( ! isDownHeapkExpanded ( ) ) {
182
186
vis . array . removeVariable ( 'i' ) ;
183
187
vis . array . removeVariable ( 'j' ) ;
184
188
}
185
- // remove k+highlighting if !isBuildHeapExpanded
186
- if ( ! isBuildHeapExpanded ( ) ) {
189
+ // remove k+highlighting if !isBuildHeapExpanded & last
190
+ // chunk of BuildHeap
191
+ if ( ! isBuildHeapExpanded ( ) && cur_k === 0 ) {
187
192
vis . array . removeVariable ( 'k' ) ;
188
- unhighlight ( vis , lastH ) ;
193
+ if ( lastH !== index )
194
+ unhighlight ( vis , lastH ) ;
189
195
}
190
- } , [ j , lastiHighlight ] ) ;
196
+ } , [ j , lastiHighlight , k ] ) ;
191
197
} else {
192
198
swap = A [ i ] ;
193
199
A [ i ] = A [ j ] ;
194
200
A [ j ] = swap ;
195
201
swapAction ( 17 , i , j ) ;
196
202
lastiHighlight = j ;
197
- chunker . add ( 18 , ( vis , p , c , lastH ) => {
203
+ chunker . add ( 18 , ( vis , p , c , lastH , cur_k ) => {
198
204
unhighlight ( vis , p , false ) ;
199
205
vis . array . assignVariable ( 'i' , c ) ;
200
206
// remove i, j if !isDownHeapkExpanded
201
207
if ( ! isDownHeapkExpanded ( ) ) {
202
208
vis . array . removeVariable ( 'i' ) ;
203
209
vis . array . removeVariable ( 'j' ) ;
204
210
}
205
- // remove k+highlighting if !isDownHeapkExpanded
206
- if ( ! isBuildHeapExpanded ( ) ) {
211
+ // remove k+highlighting if !isDownHeapkExpanded & last
212
+ // chunk of BuildHeap
213
+ if ( ! isBuildHeapExpanded ( ) && cur_k === 0 ) {
207
214
vis . array . removeVariable ( 'k' ) ;
208
- unhighlight ( vis , lastH ) ;
215
+ if ( lastH !== p )
216
+ unhighlight ( vis , lastH ) ;
209
217
}
210
- } , [ i , j , lastiHighlight ] ) ;
218
+ } , [ i , j , lastiHighlight , k ] ) ;
211
219
i = j ;
212
220
}
213
221
}
@@ -220,7 +228,7 @@ export default {
220
228
// clear variables & show 'n'
221
229
vis . array . clearVariables ( ) ;
222
230
vis . array . assignVariable ( 'n' , nVal - 1 ) ;
223
- unhighlight ( vis , index ) ; // XXX skip for first loop iteration?
231
+ unhighlight ( vis , index ) ;
224
232
} , [ n , i ] ) ;
225
233
226
234
let j ;
@@ -286,6 +294,11 @@ export default {
286
294
chunker . add ( 36 , ( vis , p , c ) => {
287
295
unhighlight ( vis , p , false ) ;
288
296
vis . array . assignVariable ( 'i' , c ) ;
297
+ // remove i, j if !isDownHeap1Expanded
298
+ if ( ! isDownHeap1Expanded ( ) ) {
299
+ vis . array . removeVariable ( 'i' ) ;
300
+ vis . array . removeVariable ( 'j' ) ;
301
+ }
289
302
} , [ i , j ] ) ;
290
303
i = j ;
291
304
}
@@ -294,10 +307,10 @@ export default {
294
307
chunker . add ( 37 , ( vis ) => {
295
308
// Put in done state
296
309
vis . array . clearVariables ( ) ;
297
- vis . array . deselect ( 0 ) ;
310
+ // vis.array.deselect(0);
311
+ unhighlight ( vis , 0 , true ) ;
298
312
vis . array . sorted ( 0 ) ;
299
313
vis . heap . sorted ( 1 ) ;
300
- unhighlight ( vis , 0 , true ) ;
301
314
} ) ;
302
315
// for test
303
316
return A ;
0 commit comments