Skip to content

Commit 0584d9b

Browse files
authored
Reimplement merge sort (#19)
1 parent cb63844 commit 0584d9b

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

src/merge-sort.js

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,44 @@
11
'use strict';
22

33
/**
4-
* @param {Array} left
5-
* @param {Array} right
4+
* @param {Array} elements
65
* @return {Array}
76
*/
8-
function merge (left, right) {
9-
const mergedArr = [];
10-
let i = 0;
11-
let j = 0;
7+
export default function mergeSort (elements) {
8+
if (elements.length < 2) return elements;
129

13-
while (i < left.length || j < right.length) {
14-
if (i < left.length) {
15-
if (j < right.length && right[j] < left[i]) {
16-
mergedArr.push(right[j++]);
17-
continue;
18-
}
10+
const mid = Math.floor(elements.length / 2);
11+
const arrayOne = elements.slice(0, mid);
12+
const arrayTwo = elements.slice(mid, elements.length);
1913

20-
mergedArr.push(left[i++]);
21-
} else {
22-
mergedArr.push(right[j++]);
23-
}
24-
}
25-
26-
return mergedArr;
14+
return merge(mergeSort(arrayOne), mergeSort(arrayTwo));
2715
}
2816

2917
/**
30-
* @param {Array} elements
18+
* @param {Array} arrayOne
19+
* @param {Array} arrayTwo
3120
* @return {Array}
3221
*/
33-
export default function mergeSort (elements) {
34-
const length = elements.length;
22+
function merge (arrayOne, arrayTwo) {
23+
const mergedArr = [];
24+
let i = 0;
25+
let j = 0;
3526

36-
if (length < 2) {
37-
return elements;
27+
while (i < arrayOne.length && j < arrayTwo.length) {
28+
if (arrayOne[i] < arrayTwo[j]) {
29+
mergedArr.push(arrayOne[i++]);
30+
} else {
31+
mergedArr.push(arrayTwo[j++]);
32+
}
3833
}
3934

40-
const halfLength = Math.floor(length / 2);
35+
while (i < arrayOne.length) {
36+
mergedArr.push(arrayOne[i++]);
37+
}
38+
39+
while (j < arrayTwo.length) {
40+
mergedArr.push(arrayTwo[j++]);
41+
}
4142

42-
return merge(mergeSort(elements.slice(0, halfLength)), mergeSort(elements.slice(halfLength, length)));
43-
};
43+
return mergedArr;
44+
}

0 commit comments

Comments
 (0)