-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmergeSort.js
41 lines (41 loc) · 1.1 KB
/
mergeSort.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
function mergeSort(arr){
// Convert array of numbers into array of arrays
for (var i = 0; i < arr.length; i++) {
arr[i] = [arr[i]];
}
// Recursive sort function
var sort = function(oldArr) {
if (oldArr.length === 1) {
return oldArr[0];
}
var nextArr = [];
for (var i=0; i<oldArr.length; i+=2) {
var nextVal = [];
if (oldArr[i+1] === undefined) {
nextArr.push(oldArr[i]);
break;
}
while (oldArr[i].length || oldArr[i+1].length) {
if(oldArr[i][0] === undefined) {
nextVal.push(oldArr[i+1][0]);
oldArr[i+1] = oldArr[i+1].slice(1);
}
else if (oldArr[i+1][0] === undefined) {
nextVal.push(oldArr[i][0]);
oldArr[i] = oldArr[i].slice(1);
}
else if(oldArr[i][0] < oldArr[i+1][0]) {
nextVal.push(oldArr[i][0]);
oldArr[i] = oldArr[i].slice(1);
}
else {
nextVal.push(oldArr[i+1][0]);
oldArr[i+1] = oldArr[i+1].slice(1);
}
}
nextArr.push(nextVal);
}
return sort(nextArr);
}
return sort(arr);
}