#алгоритмы #сортировка ![[Sorting_quicksort_anim.gif]] **Лучшая/Средняя эффективность** $O(n) = O(n*log_2{n})$ **Худшая эффективность** $O(n) = O(n^2)$ > Быстрая сортировка относится к алгоритмам сортировки. Она работает намного быстрее сортировки выбором и часто применяется в реальных программах. Основана на стратегии «[[Разделяй и властвуй (Divide and conquer)]]». Последовательность: 1) Выбрать опорный элемент 2) Разделить массив на два подмассива: элементы, меньшие опорного, и элементы, большие опорного. 3) Рекурсивно применить быструю сортировку к двум подмассивам. Быстродействие быстрой сортировки сильно зависит от выбора опорного элемента. Предположим, опорным всегда выбирается первый элемент, а быстрая сортировка применяется к уже отсортированному массиву. Быстрая сортировка не проверяет, отсортирован входной массив или нет, и все равно пытается его отсортировать. В худшем случае существуют $O(n)$ уровней, поэтому алгоритм займет время $O(n) * O(n)=O(n^2)$ ![[Pasted image 20250109093218.png]] ```javascript function quickSort(array) { if (array.length <= 1) { return array; } const middleIndex = Math.ceil(array.length / 2); const left = []; const right = []; for (let i = 0; i < array.length; i++) { if (i === middleIndex) { continue } if (array[i] < array[middleIndex]) { left.push(array[i]) } else { right.push(array[i]) } } return [ ...quickSort(left), array[middleIndex], ...quickSort(right), ] } ``` Источники: - [[Адитья Бхаргава - Грокаем Алгоритмы]] - [[Стивен Скиена - Алгоритмы. Руководство по разработке]]