area51
Version:
Experimental prototypes of alien things built in JavaScript. The bits may end up living in a different package.
78 lines (64 loc) • 1.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = mergeSort;
function merge(array, low, mid, high) {
var i = low,
j = mid + 1,
k = low;
var aux = [];
for (; k <= high; k++) aux[k] = array[k];
for (k = low; k <= high; k++) {
if (i > mid) {
array[k] = aux[j++];
} else if (j > high) {
array[k] = aux[i++];
} else if (aux[j] < aux[i]) {
array[k] = aux[j++];
} else {
array[k] = aux[i++];
}
}
};
function mergeWithCompare(array, low, mid, high, compare) {
var i = low,
j = mid + 1,
k = low;
var aux = [];
aux.length = array.length;
for (; k <= high; k++) aux[k] = array[k];
for (k = low; k <= high; k++) {
if (i > mid) {
array[k] = aux[j++];
} else if (j > high) {
array[k] = aux[i++];
} else if (compare(aux[j], aux[i]) === -1) {
array[k] = aux[j++];
} else {
array[k] = aux[i++];
}
}
}
function performSort(array, low, high) {
if (high <= low) return;
var range = (high - low) / 2;
var mid = low + Math.floor(range);
performSort(array, low, mid);
performSort(array, mid + 1, high);
merge(array, low, mid, high);
}
function performSortWitCompare(array, low, high, compare) {
if (high <= low) return;
var range = (high - low) / 2;
var mid = low + Math.floor(range);
performSort(array, low, mid);
performSort(array, mid + 1, high);
mergeWithCompare(array, low, mid, high, compare);
}
function mergeSort(array, compare, indexStart, length) {
indexStart = indexStart || 0;
length = length || array.length;
if (compare) performSortWitCompare(array, indexStart, length - 1, compare);else performSort(array, indexStart, length - 1);
}
module.exports = exports["default"];