Skip to content

Commit 83bc914

Browse files
committed
feat: left ← right line shows the left and right labels for nat and bup
1 parent 56043a3 commit 83bc914

File tree

3 files changed

+43
-13
lines changed

3 files changed

+43
-13
lines changed

src/algorithms/controllers/msort_arr_bup.js

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ import {
1616
displayMergeLabels,
1717
highlightAPointers,
1818
set_simple_stack,
19-
resetArrayA
19+
resetArrayA,
20+
highlightFromTo
2021
} from './msort_shared.js';
2122

2223

@@ -149,13 +150,15 @@ export function run_msort() {
149150

150151
let mid = left + runlength - 1;
151152
let right = Math.min(mid + runlength, (size - 1));
152-
chunker.add('mid', (vis, c_mid) => {
153+
chunker.add('mid', (vis, c_mid, c_left) => {
153154
assignVarToA(vis, 'mid', c_mid, size);
154-
}, [mid]);
155-
chunker.add('right', (vis, c_right) => {
155+
//highlightFromTo(vis, c_left, c_mid, runAColor);
156+
}, [mid, left]);
157+
chunker.add('right', (vis, c_right, c_mid) => {
156158
assignVarToA(vis, 'right', c_right, size);
159+
//highlightFromTo(vis, c_mid + 1, c_right, runBColor);
157160

158-
}, [right]);
161+
}, [right, mid]);
159162

160163
// start merge[left, mid, right] ------------------------------------------------------------
161164
let ap1 = left;
@@ -314,31 +317,39 @@ export function run_msort() {
314317
// highlight all sorted elements green
315318
for (let i = c_left; i <= c_right; i++) highlight(vis, i, sortColor);
316319

320+
assignVarToA(vis, "left", c_left, size);
321+
assignVarToA(vis, "right", c_right, size);
322+
317323
}, [A, B, left, right, runlength]);
318324

319325
left = right + 1;
320326

321-
chunker.add('left2', (vis, a, c_left, c_rlength) => {
327+
chunker.add('left2', (vis, a, c_left, c_right, c_rlength) => {
322328
vis.array.set(a, 'msort_arr_bup'); //unhighlight array a
323329
set_simple_stack(vis.array, [`runlength = ${c_rlength}`]);
324330

325331
if (c_left < size) assignVarToA(vis, 'left', c_left, size);
332+
assignVarToA(vis, "right", c_right, size);
326333

327334
if ((c_left + c_rlength) < size) {
328335
let left_2 = c_left;
329336
let mid_2 = (c_rlength + c_left - 1);
330337
let right_2 = (Math.min((mid_2 + c_rlength + 1), size) - 1);
331338
highlight2Runlength(vis, left_2, mid_2, right_2, runAColor, runBColor);
332339
}
340+
if ((c_left + c_rlength) >= size) {
341+
highlightFromTo(vis, c_left, size - 1, runAColor);
342+
}
333343

334344

335-
}, [A, left, runlength]);
345+
}, [A, left, right, runlength]);
336346

337347
}
338348

339349
runlength = 2 * runlength;
340350

341351
chunker.add('mergeDone', (vis, c_rlength) => {
352+
assignVarToA(vis, "right", undefined, size);
342353
highlightAllRunlengths(vis, c_rlength, runAColor, runBColor, size);
343354
}, [runlength])
344355

src/algorithms/controllers/msort_arr_nat.js

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ import {
1414
displayMergeLabels,
1515
highlightAPointers,
1616
set_simple_stack,
17-
resetArrayA
17+
resetArrayA,
18+
highlightFromTo
1819
} from './msort_shared.js';
1920

2021
const run = run_msort();
@@ -354,20 +355,30 @@ export function run_msort() {
354355
// highlight all sorted elements green
355356
for (let i = c_left; i <= c_right; i++) highlight(vis, i, sortColor);
356357
set_simple_stack(vis.array, [`runcount = ${c_rcount}`]);
358+
359+
assignVarToA(vis, "left", c_left, size);
360+
assignVarToA(vis, "right", c_right, size);
361+
357362
}, [A, B, left, right, runcount]);
358363
}
359364

360365
runcount = runcount + 1;
361-
chunker.add('runcount+', (vis, c_rcount) => {
366+
chunker.add('runcount+', (vis, c_left, c_mid, c_rcount) => {
367+
highlightFromTo(vis, c_left, c_mid, sortColor);
362368
set_simple_stack(vis.array, [`runcount = ${c_rcount}`]);
363-
}, [runcount]);
369+
}, [left, mid, runcount]);
364370

365371
left = right + 1;
366-
chunker.add('left2', (vis, a, c_left, c_rcount) => {
372+
chunker.add('left2', (vis, a, c_left, c_right, c_rcount) => {
367373
vis.array.set(a, 'msort_arr_nat'); // unhighlight array a
368374
set_simple_stack(vis.array, [`runcount = ${c_rcount}`]);
369-
if (c_left < size) assignVarToA(vis, 'left', c_left);
370-
}, [A, left, runcount]);
375+
if (c_left < size) {
376+
assignVarToA(vis, 'left', c_left, size);
377+
assignVarToA(vis, "right", c_right, size);
378+
}
379+
380+
381+
}, [A, left, right, runcount]);
371382

372383
} while (left < size);
373384

src/algorithms/controllers/msort_shared.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,14 @@ export function unhighlight(vis, index, color) {
4949
}
5050
}
5151

52+
// Highlights one runlength
53+
export function highlightFromTo(vis, from, to, color) {
54+
// highlight first runlength color A
55+
for (let i = from; i <= to; i++) {
56+
highlight(vis, i, color);
57+
}
58+
}
59+
5260
// Highlights two runlengths two colours
5361
export function highlight2Runlength(vis, left, mid, right, colorA, colorB) {
5462
// highlight first runlength color A

0 commit comments

Comments
 (0)