area51
Version:
Experimental prototypes of alien things built in JavaScript. The bits may end up living in a different package.
77 lines (58 loc) • 1.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = quickSort;
var _arrayUtilJs = require("./array-util.js");
function partition(array, low, high) {
var i = low,
j = high + 1,
v = array[low];
while (true) {
while (array[++i] < v) {
if (i === high) break;
}
while (v < array[--j]) {
if (j === low) break;
}
if (i >= j) break;
(0, _arrayUtilJs.swap)(array, i, j);
}
(0, _arrayUtilJs.swap)(array, low, j);
return j;
}
function partitionWithCompare(array, low, high, compare) {
var i = low,
j = high + 1,
v = array[low];
while (true) {
while (compare(array[++i], v) === -1) {
if (i === high) break;
}
while (compare(v, array[--j]) === -1) {
if (j === low) break;
}
if (i >= j) break;
(0, _arrayUtilJs.swap)(array, i, j);
}
(0, _arrayUtilJs.swap)(array, low, j);
return j;
}
function performSort(array, low, high) {
if (high <= low) return;
var j = partition(array, low, high);
performSort(array, low, j - 1);
performSort(array, j + 1, high);
}
function performSortWithCompare(array, low, high, compare) {
if (high <= low) return;
var j = partitionWithCompare(array, low, high, compare);
performSortWithCompare(array, low, j - 1, compare);
performSortWithCompare(array, j + 1, high, compare);
}
function quickSort(array, compare, indexStart, length) {
indexStart = indexStart || 0;
length = length || array.length;
if (compare) performSortWithCompare(array, indexStart, length - 1, compare);else performSort(array, indexStart, length - 1);
}
module.exports = exports["default"];