Skip to content

Commit f2329a4

Browse files
committed
fix: colour all the runlengths properly now
1 parent f9ce651 commit f2329a4

File tree

2 files changed

+47
-9
lines changed

2 files changed

+47
-9
lines changed

src/algorithms/controllers/msort_arr_bup.js

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,32 @@ function highlightAllRunlengths(vis, runlength, colorA, colorB, size) {
122122
}
123123
}
124124

125+
// Unhighlight entire array alternating colors for runlength
126+
function unhighlightAllRunlengths(vis, runlength, colorA, colorB, size) {
127+
let toggle = 0; // 0 = colorA, 1 = colorB
128+
129+
for (let i = 0; i < size; i++) {
130+
if (toggle == 0) {
131+
unhighlight(vis, i, colorA);
132+
console.log("toggle == 0");
133+
}
134+
if (toggle == 1) {
135+
unhighlight(vis, i, colorB);
136+
console.log("toggle == 1");
137+
}
138+
console.log("(i + 1) % runlength = " + (runlength % (i + 1)));
139+
console.log("(runlength = " + (runlength));
140+
// Switch color after completing a run of length 'runlength'
141+
if ((i + 1) % runlength == 0) {
142+
143+
console.log("(i + 1) % runlength == 0");
144+
145+
toggle = 1 - toggle; // Flip toggle between 0 and 1
146+
147+
} console.log("toggle = " + toggle);
148+
}
149+
}
150+
125151
// unhighlights arrayA
126152
function unhighlight(vis, index, color) {
127153
if (color == 'red') {
@@ -227,20 +253,25 @@ export function run_msort() {
227253
let left = 0;
228254

229255
chunker.add('MainWhile', (vis, c_rlength, c_left) => {
256+
230257
// display size label
231258
assignVarToA(vis, ("size = " + size), size, size);
232259

233-
let left_2 = c_left;
234-
let mid_2 = (c_rlength + c_left - 1);
235-
let right_2 = (Math.min(c_rlength * 2, size) - 1);
236260

237-
highlight2Runlength(vis, left_2, mid_2, right_2, colorA, colorB);
238261

239262
}, [runlength, left]);
240263

241-
chunker.add('left', (vis, c_left) => {
264+
chunker.add('left', (vis, c_left, c_rlength) => {
242265
assignVarToA(vis, 'left', c_left, size);
243-
}, [left]);
266+
267+
unhighlightAllRunlengths(vis, c_rlength, colorA, colorB, size);
268+
269+
let left_2 = c_left;
270+
let mid_2 = (c_rlength + c_left - 1);
271+
let right_2 = (Math.min(c_rlength * 2, size) - 1);
272+
273+
highlight2Runlength(vis, left_2, mid_2, right_2, colorA, colorB);
274+
}, [left, runlength]);
244275

245276
while ((left + runlength) <= size) {
246277

@@ -442,22 +473,30 @@ export function run_msort() {
442473

443474
left = right + 1;
444475

445-
chunker.add('left2', (vis, old_left, c_left, c_right) => {
476+
chunker.add('left2', (vis, old_left, c_left, c_right, c_rlength) => {
446477
// unhighlight all elements in A
447478
for (let i = old_left; i <= c_right; i++) {
448479
unhighlight(vis, i, colorC);
449480
}
450481
if (c_left < size) {
451482
assignVarToA(vis, 'left', c_left, size);
452483
}
484+
if (c_left + c_rlength >= size) {
485+
highlightAllRunlengths(vis, c_rlength * 2, colorA, colorB, size);
453486

454-
}, [left2, left, right]);
487+
}
488+
489+
}, [left2, left, right, runlength]);
455490

456491
}
457492

458493

494+
495+
459496
runlength = 2 * runlength;
460497
chunker.add('runlength2', (vis, c_rlength) => {
498+
499+
// highlightAllRunlengths(vis, c_rlength, colorA, colorB, size);
461500
assignVarToA(vis, 'left', undefined, size);
462501
set_simple_stack(vis.array, [c_rlength]);
463502

src/algorithms/pseudocode/msort_arr_bup.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ Mergesort(A, size) \\B Main
1818
\\Expl}
1919
\\In{
2020
merge all consecutive pairs of runs of length runlength \\Ref MergeAll
21-
// all consecutive pairs of runs merged \\B merged
2221
runlength <- runlength * 2 // merging runs doubles the run length \\B runlength2
2322
\\In}
2423
// Done \\B Done

0 commit comments

Comments
 (0)