@@ -44,6 +44,11 @@ function isDownHeapkExpanded() {
4444 return areExpanded ( [ 'BuildHeap' , 'DownHeapk' ] ) ;
4545}
4646
47+ // i, j (in sort) displayed only if second DownHeap is expanded
48+ function isDownHeap1Expanded ( ) {
49+ return areExpanded ( [ 'SortHeap' , 'DownHeap1' ] ) ;
50+ }
51+
4752export default {
4853 initVisualisers ( ) {
4954 return {
@@ -133,7 +138,6 @@ export default {
133138
134139 chunker . add ( 4 , ( vis , index1 , index2 ) => {
135140 vis . array . assignVariable ( 'k' , index1 ) ;
136- // if (tmp != null) { // XXX looks dodgy using tmp here?
137141 if ( index2 != null ) {
138142 unhighlight ( vis , index2 ) ;
139143 vis . array . removeVariable ( 'j' ) ;
@@ -174,40 +178,44 @@ export default {
174178 // parent is greater than largest child, so it is already a valid heap
175179 if ( A [ i ] >= A [ j ] ) {
176180 heap = true ;
177- chunker . add ( 15 , ( vis , index , lastH ) => {
181+ chunker . add ( 15 , ( vis , index , lastH , cur_k ) => {
178182 unhighlight ( vis , index , false ) ;
179183 // possible last chunk in BuildHeap/DownHeapk
180184 // remove i, j if !isDownHeapkExpanded
181185 if ( ! isDownHeapkExpanded ( ) ) {
182186 vis . array . removeVariable ( 'i' ) ;
183187 vis . array . removeVariable ( 'j' ) ;
184188 }
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 ) {
187192 vis . array . removeVariable ( 'k' ) ;
188- unhighlight ( vis , lastH ) ;
193+ if ( lastH !== index )
194+ unhighlight ( vis , lastH ) ;
189195 }
190- } , [ j , lastiHighlight ] ) ;
196+ } , [ j , lastiHighlight , k ] ) ;
191197 } else {
192198 swap = A [ i ] ;
193199 A [ i ] = A [ j ] ;
194200 A [ j ] = swap ;
195201 swapAction ( 17 , i , j ) ;
196202 lastiHighlight = j ;
197- chunker . add ( 18 , ( vis , p , c , lastH ) => {
203+ chunker . add ( 18 , ( vis , p , c , lastH , cur_k ) => {
198204 unhighlight ( vis , p , false ) ;
199205 vis . array . assignVariable ( 'i' , c ) ;
200206 // remove i, j if !isDownHeapkExpanded
201207 if ( ! isDownHeapkExpanded ( ) ) {
202208 vis . array . removeVariable ( 'i' ) ;
203209 vis . array . removeVariable ( 'j' ) ;
204210 }
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 ) {
207214 vis . array . removeVariable ( 'k' ) ;
208- unhighlight ( vis , lastH ) ;
215+ if ( lastH !== p )
216+ unhighlight ( vis , lastH ) ;
209217 }
210- } , [ i , j , lastiHighlight ] ) ;
218+ } , [ i , j , lastiHighlight , k ] ) ;
211219 i = j ;
212220 }
213221 }
@@ -220,7 +228,7 @@ export default {
220228 // clear variables & show 'n'
221229 vis . array . clearVariables ( ) ;
222230 vis . array . assignVariable ( 'n' , nVal - 1 ) ;
223- unhighlight ( vis , index ) ; // XXX skip for first loop iteration?
231+ unhighlight ( vis , index ) ;
224232 } , [ n , i ] ) ;
225233
226234 let j ;
@@ -286,6 +294,11 @@ export default {
286294 chunker . add ( 36 , ( vis , p , c ) => {
287295 unhighlight ( vis , p , false ) ;
288296 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+ }
289302 } , [ i , j ] ) ;
290303 i = j ;
291304 }
@@ -294,10 +307,10 @@ export default {
294307 chunker . add ( 37 , ( vis ) => {
295308 // Put in done state
296309 vis . array . clearVariables ( ) ;
297- vis . array . deselect ( 0 ) ;
310+ // vis.array.deselect(0);
311+ unhighlight ( vis , 0 , true ) ;
298312 vis . array . sorted ( 0 ) ;
299313 vis . heap . sorted ( 1 ) ;
300- unhighlight ( vis , 0 , true ) ;
301314 } ) ;
302315 // for test
303316 return A ;
0 commit comments