Skip to content

Commit 8193614

Browse files
committed
improve merge sort
1 parent 46d009b commit 8193614

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

src/algorithms/sorting/merge-sort.js

+17-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
// tag::merge[]
2+
/**
3+
* Merge two arrays in ascending order
4+
* @param {Array} array1
5+
* @param {Array} array2
6+
*/
17
function merge(array1, array2 = []) {
28
const mergedLength = array1.length + array2.length;
39
const mergedArray = Array(mergedLength);
@@ -6,29 +12,39 @@ function merge(array1, array2 = []) {
612
if (i2 >= array2.length || (i1 < array1.length && array1[i1] <= array2[i2])) {
713
mergedArray[index] = array1[i1];
814
i1 += 1;
9-
} else if (i1 >= array1.length || (i2 < array2.length && array2[i2] <= array1[i1])) {
15+
} else {
1016
mergedArray[index] = array2[i2];
1117
i2 += 1;
1218
}
1319
}
1420

1521
return mergedArray;
1622
}
23+
// end::merge[]
1724

25+
// tag::splitSort[]
26+
/**
27+
* Split array in half until two or less elements are left.
28+
* Sort these two elements and combine them back using the merge function.
29+
* @param {Array} array
30+
*/
1831
function splitSort(array) {
1932
const size = array.length;
33+
2034
if (size < 2) {
2135
return array;
2236
} else if (size === 2) {
2337
return array[0] < array[1] ? array : [array[1], array[0]];
2438
}
39+
2540
const middle = Math.ceil(size / 2);
2641

2742
return merge(
2843
splitSort(array.slice(0, middle)),
2944
splitSort(array.slice(middle)),
3045
);
3146
}
47+
// end::splitSort[]
3248

3349
// tag::sort[]
3450
/**

0 commit comments

Comments
 (0)