Алгоритмы

Расскажите про быструю сортировку.


Быстрая сортировка (Quick Sort) - это эффективный алгоритм сортировки, который основан на принципе "разделяй и властвуй". Он разделяет массив на подмассивы, сортирует их отдельно и затем объединяет весь массив в отсортированном порядке. Асимптотика: O(n*log(n)) в среднем и лучшем случае. Наихудшая оценка O(n^2) достигается при неудачном выборе опорного элемента. Принцип работы быстрой сортировки следующий: 1. Выбираем опорный элемент из массива. Это может быть любой элемент, например, первый, последний или случайный. 2. Разделяем массив на две части: элементы, меньшие опорного, и элементы, большие опорного. 3. Рекурсивно применяем быструю сортировку к обеим частям массива. 4. Объединяем отсортированные части массива. Пример реализации быстрой сортировки на языке Java: public class QuickSort { public static void quickSort(int[] arr, int low, int high) { if (low < high) { int pivotIndex = partition(arr, low, high); quickSort(arr, low, pivotIndex - 1); quickSort(arr, pivotIndex + 1, high); } } public static int partition(int[] arr, int low, int high) { int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; int n = arr.length; quickSort(arr, 0, n - 1); System.out.println("Отсортированный массив:"); for (int i = 0; i < n; i++) { System.out.print(arr[i] + " "); } } } В данном примере мы сортируем массив целых чисел с помощью быстрой сортировки. После сортировки выводим отсортированный массив на экран. Быстрая сортировка обычно является одним из самых быстрых алгоритмов сортировки в среднем случае. Время выполнения быстрой сортировки в среднем составляет O(n log n), где n - количество элементов в массиве. Однако, в худшем случае (когда массив уже отсортирован или содержит множество повторяющихся элементов), время выполнения может составлять O(n^2).


Копировать ссылку