Skip to content

Commit d65b149

Browse files
committed
feat: runlength displayed using setList(), replacing the stack list with runlength
1 parent 68e3b87 commit d65b149

File tree

3 files changed

+199
-172
lines changed

3 files changed

+199
-172
lines changed

src/algorithms/controllers/msort_arr_bup.js

Lines changed: 32 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ function displayMergeLabels(vis, ap1, max1, ap2, max2, bp, size) {
145145
if (isMergeExpanded()) assignVarToB(vis, 'bp', bp, size);
146146
}
147147

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+
148154
/**
149155
*
150156
* @param {object} chunker
@@ -162,6 +168,7 @@ export function run_msort() {
162168

163169
const entire_num_array = nodes;
164170
const size = nodes.length; // size of the array
171+
let simple_stack = [];
165172

166173
//// start mergesort --------------------------------------------------------
167174

@@ -177,16 +184,17 @@ export function run_msort() {
177184
vis.arrayB.set(b, 'msort_arr_bup');
178185
vis.arrayB.setLargestValue(maxValue);
179186
}
187+
180188
}, [A, B, size], length);
181189

182190
chunker.add('runlength', (vis, c_rlength) => {
183191
displayRunlength(vis, c_rlength, size);
184-
}, [runlength]);
192+
set_simple_stack(vis.array, [c_rlength]);
193+
}, [runlength, simple_stack]);
185194

186195
while (runlength < size) {
187196
let left = 0;
188197

189-
// while runlength < size
190198
chunker.add('MainWhile', (vis, c_rlength, c_left) => {
191199
// display size label
192200
assignVarToA(vis, ("size = " + size), size, size);
@@ -267,12 +275,13 @@ export function run_msort() {
267275
while (true) {
268276
if (!(ap1 <= max1 && ap2 <= max2)) break;
269277

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) => {
271279
vis.array.set(a, 'msort_arr_bup');
272280
displayMergeLabels(vis, c_ap1, c_max1, c_ap2, c_max2, c_bp, size);
273281
// future color: should be colorA & colorB
274282
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]);
276285

277286
chunker.add('findSmaller', () => {
278287
// no animation
@@ -283,7 +292,7 @@ export function run_msort() {
283292
B[bp] = A[ap1];
284293
A[ap1] = undefined;
285294

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) => {
287296

288297
if (isMergeExpanded()) vis.arrayB.set(b, 'msort_arr_bup');
289298
vis.array.set(a, 'msort_arr_bup');
@@ -293,7 +302,8 @@ export function run_msort() {
293302
highlight2Runlength(vis, c_left, c_mid, c_right, colorA, colorA);
294303
// highlight sorted elements green (colorC)
295304
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]);
297307

298308
ap1 = ap1 + 1;
299309
chunker.add('ap1++', (vis, c_ap1) => {
@@ -314,7 +324,7 @@ export function run_msort() {
314324
B[bp] = A[ap2];
315325
A[ap2] = undefined;
316326

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) => {
318328
if (isMergeExpanded()) vis.arrayB.set(b, 'msort_arr_bup');
319329
vis.array.set(a, 'msort_arr_bup');
320330
displayMergeLabels(vis, c_ap1, c_max1, c_ap2, c_max2, c_bp, size);
@@ -323,8 +333,8 @@ export function run_msort() {
323333
highlight2Runlength(vis, c_left, c_mid, c_right, colorA, colorA);
324334
// highlight sorted elements green / colorB
325335
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]);
328338

329339
ap2 = ap2 + 1;
330340
chunker.add('ap2++', (vis, c_ap2) => {
@@ -344,7 +354,7 @@ export function run_msort() {
344354
bp = bp + 1;
345355
}
346356

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) => {
348358

349359
vis.array.set(a, 'msort_arr_bup');
350360
if (isMergeExpanded()) vis.arrayB.set(b, 'msort_arr_bup');
@@ -359,15 +369,16 @@ export function run_msort() {
359369

360370
// future color: should be colorA & colorB
361371
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]);
363374

364375
for (let i = ap2; i <= max2; i++) {
365376
B[bp] = A[i];
366377
A[i] = undefined;
367378
bp = bp + 1;
368379
}
369380

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) => {
371382
vis.array.set(a, 'msort_arr_bup');
372383
if (isMergeExpanded()) vis.arrayB.set(b, 'msort_arr_bup');
373384
assignVarToA(vis, 'ap2', c_ap2, size);
@@ -378,22 +389,23 @@ export function run_msort() {
378389

379390
// future color: should be colorA & colorB
380391
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]);
383394

384395
// copy merged elements from B to A
385396
for (let i = left; i <= right; i++) {
386397
A[i] = B[i];
387398
B[i] = undefined;
388399
}
389400

390-
chunker.add('copyBA', (vis, a, b, c_left, c_right) => {
401+
chunker.add('copyBA', (vis, a, b, c_left, c_right, c_rlength) => {
391402
vis.array.set(a, 'msort_arr_bup');
392403
if (isMergeExpanded()) vis.arrayB.set(b, 'msort_arr_bup');
393404

394405
// highlight all sorted elements green
395406
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]);
397409

398410
let left2 = left; // this is the old left before it was updated
399411

@@ -412,15 +424,15 @@ export function run_msort() {
412424

413425

414426
runlength = 2 * runlength;
415-
chunker.add('runlength2', (vis, runlength) => {
427+
chunker.add('runlength2', (vis, c_rlength) => {
416428
assignVarToA(vis, 'left', undefined, size);
417-
if (runlength > size) {
429+
if (c_rlength > size) {
418430
assignVarToA(vis, 'done', size, size);
419431
}
420432
else {
421-
displayRunlength(vis, runlength, size);
433+
displayRunlength(vis, c_rlength, size);
422434
}
423-
435+
set_simple_stack(vis.array, [c_rlength]);
424436
}, [runlength]);
425437
}
426438

0 commit comments

Comments
 (0)