UNPKG

lgrthms

Version:

Algorithms and data structures for your JavaScript and TypeScript projects 🧑‍💻

45 lines (44 loc) 1.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.quickSort = void 0; const Comparator_1 = require("../../utils/Comparator"); const arrays_1 = require("../../utils/arrays"); // Best: O(nlog(n)) time | O(log(n)) space // Avg: O(nlog(n)) time | O(log(n)) space // Worst: O(n^2) time | O(log(n)) space function quickSort(array, compareFn) { const comparator = new Comparator_1.Comparator(compareFn); doQuickSort(array, comparator, 0, array.length - 1); return array; } exports.quickSort = quickSort; function doQuickSort(array, comparator, startIdx, endIdx) { if (endIdx <= startIdx) { return; } const pivotIdx = startIdx; let leftIdx = pivotIdx + 1; let rightIdx = endIdx; while (leftIdx <= rightIdx) { if (comparator.isGreaterThan(array[leftIdx], array[pivotIdx]) && comparator.isLessThan(array[rightIdx], array[leftIdx])) { (0, arrays_1.swap)(array, leftIdx, rightIdx); } if (comparator.isLessThanOrEqual(array[leftIdx], array[pivotIdx])) { leftIdx++; } if (comparator.isGreaterThanOrEqual(array[rightIdx], array[pivotIdx])) { rightIdx--; } } (0, arrays_1.swap)(array, pivotIdx, rightIdx); const leftLength = rightIdx - 1 - startIdx; const rightLength = endIdx - rightIdx + 1; if (leftLength <= rightLength) { doQuickSort(array, comparator, startIdx, rightIdx - 1); doQuickSort(array, comparator, rightIdx + 1, endIdx); } else { doQuickSort(array, comparator, rightIdx + 1, endIdx); doQuickSort(array, comparator, startIdx, rightIdx - 1); } }