@@ -145,6 +145,12 @@ function displayMergeLabels(vis, ap1, max1, ap2, max2, bp, size) {
145
145
if ( isMergeExpanded ( ) ) assignVarToB ( vis , 'bp' , bp , size ) ;
146
146
}
147
147
148
+ function set_simple_stack ( vis_array , c_stk ) {
149
+ console . log ( "set_simple_stack" + c_stk ) ;
150
+ console . log ( c_stk ) ;
151
+ vis_array . setList ( c_stk ) ;
152
+ }
153
+
148
154
/**
149
155
*
150
156
* @param {object } chunker
@@ -162,6 +168,7 @@ export function run_msort() {
162
168
163
169
const entire_num_array = nodes ;
164
170
const size = nodes . length ; // size of the array
171
+ let simple_stack = [ ] ;
165
172
166
173
//// start mergesort --------------------------------------------------------
167
174
@@ -177,16 +184,17 @@ export function run_msort() {
177
184
vis . arrayB . set ( b , 'msort_arr_bup' ) ;
178
185
vis . arrayB . setLargestValue ( maxValue ) ;
179
186
}
187
+
180
188
} , [ A , B , size ] , length ) ;
181
189
182
190
chunker . add ( 'runlength' , ( vis , c_rlength ) => {
183
191
displayRunlength ( vis , c_rlength , size ) ;
184
- } , [ runlength ] ) ;
192
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
193
+ } , [ runlength , simple_stack ] ) ;
185
194
186
195
while ( runlength < size ) {
187
196
let left = 0 ;
188
197
189
- // while runlength < size
190
198
chunker . add ( 'MainWhile' , ( vis , c_rlength , c_left ) => {
191
199
// display size label
192
200
assignVarToA ( vis , ( "size = " + size ) , size , size ) ;
@@ -267,12 +275,13 @@ export function run_msort() {
267
275
while ( true ) {
268
276
if ( ! ( ap1 <= max1 && ap2 <= max2 ) ) break ;
269
277
270
- chunker . add ( 'MergeWhile' , ( vis , a , c_left , c_right , c_mid , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp ) => {
278
+ chunker . add ( 'MergeWhile' , ( vis , a , c_left , c_right , c_mid , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp , c_rlength ) => {
271
279
vis . array . set ( a , 'msort_arr_bup' ) ;
272
280
displayMergeLabels ( vis , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp , size ) ;
273
281
// future color: should be colorA & colorB
274
282
highlight2Runlength ( vis , c_left , c_mid , c_right , colorA , colorA ) ;
275
- } , [ A , left , right , mid , ap1 , max1 , ap2 , max2 , bp ] ) ;
283
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
284
+ } , [ A , left , right , mid , ap1 , max1 , ap2 , max2 , bp , runlength ] ) ;
276
285
277
286
chunker . add ( 'findSmaller' , ( ) => {
278
287
// no animation
@@ -283,7 +292,7 @@ export function run_msort() {
283
292
B [ bp ] = A [ ap1 ] ;
284
293
A [ ap1 ] = undefined ;
285
294
286
- chunker . add ( 'copyap1' , ( vis , a , b , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp , c_left , c_right , c_mid ) => {
295
+ chunker . add ( 'copyap1' , ( vis , a , b , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp , c_left , c_right , c_mid , c_rlength ) => {
287
296
288
297
if ( isMergeExpanded ( ) ) vis . arrayB . set ( b , 'msort_arr_bup' ) ;
289
298
vis . array . set ( a , 'msort_arr_bup' ) ;
@@ -293,7 +302,8 @@ export function run_msort() {
293
302
highlight2Runlength ( vis , c_left , c_mid , c_right , colorA , colorA ) ;
294
303
// highlight sorted elements green (colorC)
295
304
for ( let i = c_left ; i <= c_bp ; i ++ ) highlightB ( vis , i , colorC ) ;
296
- } , [ A , B , ap1 , max1 , ap2 , max2 , bp , left , right , mid ] ) ;
305
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
306
+ } , [ A , B , ap1 , max1 , ap2 , max2 , bp , left , right , mid , runlength ] ) ;
297
307
298
308
ap1 = ap1 + 1 ;
299
309
chunker . add ( 'ap1++' , ( vis , c_ap1 ) => {
@@ -314,7 +324,7 @@ export function run_msort() {
314
324
B [ bp ] = A [ ap2 ] ;
315
325
A [ ap2 ] = undefined ;
316
326
317
- chunker . add ( 'copyap2' , ( vis , a , b , c_ap1 , c_ap2 , c_bp , c_max1 , c_max2 , c_left , c_right , c_mid ) => {
327
+ chunker . add ( 'copyap2' , ( vis , a , b , c_ap1 , c_ap2 , c_bp , c_max1 , c_max2 , c_left , c_right , c_mid , c_rlength ) => {
318
328
if ( isMergeExpanded ( ) ) vis . arrayB . set ( b , 'msort_arr_bup' ) ;
319
329
vis . array . set ( a , 'msort_arr_bup' ) ;
320
330
displayMergeLabels ( vis , c_ap1 , c_max1 , c_ap2 , c_max2 , c_bp , size ) ;
@@ -323,8 +333,8 @@ export function run_msort() {
323
333
highlight2Runlength ( vis , c_left , c_mid , c_right , colorA , colorA ) ;
324
334
// highlight sorted elements green / colorB
325
335
for ( let i = c_left ; i <= c_bp ; i ++ ) highlightB ( vis , i , 'green' )
326
-
327
- } , [ A , B , ap1 , ap2 , bp , max1 , max2 , left , right , mid ] ) ;
336
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
337
+ } , [ A , B , ap1 , ap2 , bp , max1 , max2 , left , right , mid , runlength ] ) ;
328
338
329
339
ap2 = ap2 + 1 ;
330
340
chunker . add ( 'ap2++' , ( vis , c_ap2 ) => {
@@ -344,7 +354,7 @@ export function run_msort() {
344
354
bp = bp + 1 ;
345
355
}
346
356
347
- chunker . add ( 'CopyRest1' , ( vis , a , b , c_ap1 , c_max1 , c_left , c_right , c_mid , c_bp ) => {
357
+ chunker . add ( 'CopyRest1' , ( vis , a , b , c_ap1 , c_max1 , c_left , c_right , c_mid , c_bp , c_rlength ) => {
348
358
349
359
vis . array . set ( a , 'msort_arr_bup' ) ;
350
360
if ( isMergeExpanded ( ) ) vis . arrayB . set ( b , 'msort_arr_bup' ) ;
@@ -359,15 +369,16 @@ export function run_msort() {
359
369
360
370
// future color: should be colorA & colorB
361
371
highlight2Runlength ( vis , c_left , c_mid , c_right , colorA , colorA ) ;
362
- } , [ A , B , ap1 , max1 , left , right , mid , bp ] ) ;
372
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
373
+ } , [ A , B , ap1 , max1 , left , right , mid , bp , runlength ] ) ;
363
374
364
375
for ( let i = ap2 ; i <= max2 ; i ++ ) {
365
376
B [ bp ] = A [ i ] ;
366
377
A [ i ] = undefined ;
367
378
bp = bp + 1 ;
368
379
}
369
380
370
- chunker . add ( 'CopyRest2' , ( vis , a , b , c_ap2 , c_max2 , c_left , c_right , c_mid ) => {
381
+ chunker . add ( 'CopyRest2' , ( vis , a , b , c_ap2 , c_max2 , c_left , c_right , c_mid , c_rlength ) => {
371
382
vis . array . set ( a , 'msort_arr_bup' ) ;
372
383
if ( isMergeExpanded ( ) ) vis . arrayB . set ( b , 'msort_arr_bup' ) ;
373
384
assignVarToA ( vis , 'ap2' , c_ap2 , size ) ;
@@ -378,22 +389,23 @@ export function run_msort() {
378
389
379
390
// future color: should be colorA & colorB
380
391
highlight2Runlength ( vis , c_left , c_mid , c_right , colorA , colorA ) ;
381
-
382
- } , [ A , B , ap2 , max2 , left , right , mid ] ) ;
392
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
393
+ } , [ A , B , ap2 , max2 , left , right , mid , runlength ] ) ;
383
394
384
395
// copy merged elements from B to A
385
396
for ( let i = left ; i <= right ; i ++ ) {
386
397
A [ i ] = B [ i ] ;
387
398
B [ i ] = undefined ;
388
399
}
389
400
390
- chunker . add ( 'copyBA' , ( vis , a , b , c_left , c_right ) => {
401
+ chunker . add ( 'copyBA' , ( vis , a , b , c_left , c_right , c_rlength ) => {
391
402
vis . array . set ( a , 'msort_arr_bup' ) ;
392
403
if ( isMergeExpanded ( ) ) vis . arrayB . set ( b , 'msort_arr_bup' ) ;
393
404
394
405
// highlight all sorted elements green
395
406
for ( let i = c_left ; i <= c_right ; i ++ ) highlight ( vis , i , colorC ) ;
396
- } , [ A , B , left , right ] ) ;
407
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
408
+ } , [ A , B , left , right , runlength ] ) ;
397
409
398
410
let left2 = left ; // this is the old left before it was updated
399
411
@@ -412,15 +424,15 @@ export function run_msort() {
412
424
413
425
414
426
runlength = 2 * runlength ;
415
- chunker . add ( 'runlength2' , ( vis , runlength ) => {
427
+ chunker . add ( 'runlength2' , ( vis , c_rlength ) => {
416
428
assignVarToA ( vis , 'left' , undefined , size ) ;
417
- if ( runlength > size ) {
429
+ if ( c_rlength > size ) {
418
430
assignVarToA ( vis , 'done' , size , size ) ;
419
431
}
420
432
else {
421
- displayRunlength ( vis , runlength , size ) ;
433
+ displayRunlength ( vis , c_rlength , size ) ;
422
434
}
423
-
435
+ set_simple_stack ( vis . array , [ c_rlength ] ) ;
424
436
} , [ runlength ] ) ;
425
437
}
426
438
0 commit comments