Jaka jest złożoność czasowa algorytmu szybkiego sortowania w najgorszym przypadku?
sobes.tech AI
Odpowiedź od AI
Złożoność czasowa algorytmu szybkiego sortowania (QuickSort) w najgorszym przypadku wynosi O(n²), gdzie n to liczba elementów do posortowania.
Najgorszy scenariusz występuje, gdy element pivot (pivot) jest wybierany w taki sposób, że podział tablicy jest jak najbardziej nierówny — na przykład, gdy pivot zawsze jest najmniejszym lub największym elementem, a jedna z części zawiera n-1 elementów, a druga 0.
W tym przypadku rekurencja zamienia się w sekwencyjne przejście przez tablicę, co prowadzi do złożoności kwadratowej.
Jednak w średnim i najlepszym przypadku QuickSort działa w O(n log n), co czyni go bardzo wydajnym w praktyce.
Przykład w C# (bez optymalizacji wyboru pivot):
void QuickSort(int[] arr, int left, int right) {
if (left >= right) return;
int pivot = arr[right];
int partitionIndex = left;
for (int i = left; i < right; i++) {
if (arr[i] < pivot) {
int temp = arr[i];
arr[i] = arr[partitionIndex];
arr[partitionIndex] = temp;
partitionIndex++;
}
}
arr[right] = arr[partitionIndex];
arr[partitionIndex] = pivot;
QuickSort(arr, left, partitionIndex - 1);
QuickSort(arr, partitionIndex + 1, right);
}
Jeśli dane wejściowe są już posortowane lub prawie posortowane, a pivot jest źle wybierany (np. zawsze ostatni element), złożoność będzie O(n²).