Skip to content
This repository was archived by the owner on Feb 28, 2023. It is now read-only.

Commit 2dc8149

Browse files
committed
bugfixes + new sorting algorithm
1 parent 9a4c56a commit 2dc8149

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

algos/intro_sort.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
async function introSort(a, display) {
2-
let maxDepth = Math.floor(Math.log(a.length) * 2)
2+
let maxDepth = Math.floor(Math.log(a.length) * 2);
33
await introSort_rec(a, 0, a.length-1, maxDepth, display);
44
}
55

@@ -20,7 +20,7 @@ async function introSort_rec(a, l, r, maxd, display) {
2020
}
2121
}
2222
else {
23-
if (p-l >= 1) {
23+
if ((p-1)-l >= 1) {
2424
await introSort_rec(a, l, p-1, maxd-1, display);
2525
}
2626
if (r-(p+1) >= 1) {

algos/merge_sort.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ async function mergeSort(a, l, r, display) {
1616
while (a2[0] !== undefined) {
1717
if (a1[0] < a2[0]) {
1818
a3[i] = a1.splice(0, 1)[0];
19-
a[i] = a3[i];
19+
a[i+l] = a3[i];
2020
} else {
2121
a3[i] = a2.splice(0, 1)[0];
22-
a[i] = a3[i];
22+
a[i+l] = a3[i];
2323
}
2424

2525
glob_comp += 2;
@@ -37,7 +37,7 @@ async function mergeSort(a, l, r, display) {
3737
a3.push(...a2);
3838

3939
for (let j = i; j < a3.length; j++) {
40-
a[j] = a3[j];
40+
a[j+l] = a3[j];
4141
}
4242

4343
display(a);

algos/quick_merge_sort.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
async function qmSort(a, l, r, threshold, display) {
2+
if (r-l<=threshold) {
3+
await mergeSort(a, l, r, display);
4+
return;
5+
}
6+
7+
let p = await quickPartition(a, l, r, display);
8+
9+
if ((p-1)-l >= 1)
10+
await qmSort(a, l, p-1, threshold, display);
11+
if (r-(p+1) >= 1)
12+
await qmSort(a, p+1, r, threshold, display);
13+
}

index.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ <h1><span class='important_letter'>S</span>orting <span class='important_letter'
166166
<option value="shell_sort">ShellSort</option>
167167
<option value="comb_sort">CombSort</option>
168168

169+
<option value="quick_merge_sort">Quick-MergeSort</option>
169170
<option value="gnome_sort">GnomeSort</option>
170171
<option value="cocktail_sort">CocktailShaker-Sort</option>
171172
<option value="cocktail_merge_sort">Cocktail-MergeSort</option>
@@ -250,6 +251,7 @@ <h1><span class='important_letter'>S</span>orting <span class='important_letter'
250251
<script src="algos/double_selection_sort.js"></script>
251252
<script src="algos/gravity_sort.js"></script>
252253
<script src="algos/cocktail_merge.js"></script>
254+
<script src="algos/quick_merge_sort.js"></script>
253255

254256
<script src="visualize.js"></script>
255257

@@ -480,6 +482,13 @@ <h1><span class='important_letter'>S</span>orting <span class='important_letter'
480482
doCocktailMergeSort(rarr);
481483
}
482484
break;
485+
case 'quick_merge_sort':
486+
{
487+
refresh(0, 0);
488+
rarr = glob_random_func(glob_amount, glob_upper, glob_lower, glob_display_func);
489+
doQuickMergeSort(rarr);
490+
}
491+
break;
483492
}
484493
};
485494

visualize.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,6 +453,21 @@ async function doCocktailMergeSort(rarr) {
453453

454454
document.getElementById('algorithm_settings').style.display = "block";
455455
}
456+
async function doQuickMergeSort(rarr) {
457+
document.getElementById('algorithm_settings').style.display = "none";
458+
459+
glob_comp = 0;
460+
glob_movm = 0;
461+
462+
// -- QUICK-MERGE SORT -- //
463+
document.getElementById('algorithm_div').innerHTML = "Quick-MergeSort";
464+
await qmSort(rarr, 0, rarr.length-1, Math.floor(rarr.length/8), glob_display_func);
465+
466+
glob_comp = 0;
467+
glob_movm = 0;
468+
469+
document.getElementById('algorithm_settings').style.display = "block";
470+
}
456471

457472

458473
async function visualize_init(amount, upper, lower) {

0 commit comments

Comments
 (0)