-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathindex.js
45 lines (35 loc) · 992 Bytes
/
index.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
42
43
44
45
"use strict";
module.exports = mergesort;
var comparator = function (a, b) {
return a - b;
};
var slice = Array.prototype.slice;
var left = function (array) {
return slice.call(array, 0, array.length / 2);
};
var right = function (array) {
return slice.call(array, array.length / 2);
};
function merge(leftList, rightList, cmp) {
var sorted = [];
while (leftList.length > 0 && rightList.length > 0) {
if (cmp(leftList[0], rightList[0]) <= 0) {
sorted.push(leftList.shift());
} else {
sorted.push(rightList.shift());
}
}
return sorted.concat(leftList, rightList);
}
function mergesort(array) {
var cmp = arguments[1] === undefined ? comparator : arguments[1];
var newArray = slice.call(array);
var leftList = undefined,
rightList = undefined;
if (newArray.length <= 1) {
return newArray;
}
leftList = mergesort(left(newArray), cmp);
rightList = mergesort(right(newArray), cmp);
return merge(leftList, rightList, cmp);
}