pivot. Затем все элементы меньше опорного перемещаются в один подмассив, а все элементы больше – в другой. Затем рекурсивно сортируются левый и правый подмассивы и объединяются: [quickSort(left), equal, quickSort(right)].Время – O(n log n) в среднем, O(n^2) в худшем; Память – O(n) для результата + стек O(log n) в среднем.
1function quicksort(arr: number[]): number[] {2 if (arr.length <= 1) {3 return arr.slice();4 }5 const pivot = arr[Math.floor(arr.length / 2)]; // pivot - опорный элемент6 const less = [];7 const equal = [];8 const greater = [];9 for (const i of arr) {10 if (i < pivot) less.push(i);11 else if (i > pivot) greater.push(i);12 else equal.push(i);13 }14 return [...quicksort(less), ...equal, ...quicksort(greater)];15}1617quicksort([10,5,2,3]) // -> [2,3,5,10]18quicksort([10,-2,7,7,0,4]) // -> [-2,0,4,7,7,10]19quicksort([]) // -> []20quicksort([1]) // -> [1]21