UNPKG

javascript-algorithms-and-data-structures

Version:

Algorithms and data-structures implemented on JavaScript

49 lines (39 loc) 1.44 kB
import Sort from '../Sort'; export default class QuickSort extends Sort { /** * @param {*[]} originalArray * @return {*[]} */ sort(originalArray) { // Clone original array to prevent it from modification. const array = [...originalArray]; // If array has less than or equal to one elements then it is already sorted. if (array.length <= 1) { return array; } // Init left and right arrays. const leftArray = []; const rightArray = []; // Take the first element of array as a pivot. const pivotElement = array.shift(); const centerArray = [pivotElement]; // Split all array elements between left, center and right arrays. while (array.length) { const currentElement = array.shift(); // Call visiting callback. this.callbacks.visitingCallback(currentElement); if (this.comparator.equal(currentElement, pivotElement)) { centerArray.push(currentElement); } else if (this.comparator.lessThan(currentElement, pivotElement)) { leftArray.push(currentElement); } else { rightArray.push(currentElement); } } // Sort left and right arrays. const leftArraySorted = this.sort(leftArray); const rightArraySorted = this.sort(rightArray); // Let's now join sorted left array with center array and with sorted right array. return leftArraySorted.concat(centerArray, rightArraySorted); } }