UNPKG

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
"use strict"; 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"];