Istnieje mnóstwo algorytmów sortowania. Znalezienie odpowiedniego dopasowania do aplikacji to zadanie, które wymaga krótkiego zrozumienia takich czynników, jak wydajność, złożoność czasowa, długość kodu itp. Konkretnego algorytmu. W tym poście przyjrzymy się wszystkim podstawowym koncepcjom wymaganym do zaimplementowania Quicksort w C ++ w następującej kolejności:
- Zrozumienie algorytmu Quicksort
- Pseudokod dla Quicksort
- Program Quicksort w C ++
- Szybkie sortowanie złożoności czasowej
Zrozumienie algorytmu Quicksort
Tak jak Merge Sort , Quicksort jest zgodny ze strategią dziel i rządź. Stosując strategię dziel i zwyciężaj, dzielimy problem na wiele podproblemów i rozwiązujemy je rekurencyjnie. Najpierw zrozumiemy cały proces krok po kroku, a następnie, na przykładzie, rozwiniemy głębokie zrozumienie całego procesu.
Najpierw poprosimy użytkownika o nieposortowaną tablicę.
Gdy mamy już naszą nieposortowaną tablicę, musimy wybrać wartość przestawną z tablicy. Możemy wybrać dowolną wartość.
Gdy już wybierzemy punkt obrotu, musimy ułożyć pozostałe elementy tablicy w taki sposób, aby wszystkie elementy mniejsze niż wartość pivot były umieszczone po prawej stronie wartości pivot, a wszystkie elementy większe niż pivot value należy umieścić po prawej stronie wartości pivot.
Wykonujemy krok 3, aż otrzymamy naszą posortowaną tablicę.
Rozważmy teraz przykład, zaimplementujmy algorytm i zobaczmy, jak to działa.
Witaj [5, 4, 1, 11, 9, 6, 2, 3] w tym przykładzie zawsze będziemy uważać pivot za skrajny prawy element listy.
Sortuj listę c ++
Przejdźmy przez każdy krok i zrozummy logikę, której używaliśmy do rozwiązania problemu.
Najpierw wybraliśmy „3” jako naszą oś obrotu i umieściliśmy wszystkie elementy mniejsze niż „3” po prawej stronie i wszystkie elementy większe niż „3” po prawej.
W tym momencie mamy 2 podproblemy. Najpierw rozwiążmy podproblem po prawej stronie. Wybraliśmy jeden jako nasz punkt obrotu i umieściliśmy „2” po prawej stronie.
Aby rozwiązać drugi podproblem, wybieramy „6” jako naszą oś obrotu i umieszczamy elementy, jak omówiliśmy wcześniej.
Mamy jeszcze 2 podproblemy. Pierwsza z nich jest rozwiązana przez wybranie 4 jako oś, a druga jest rozwiązana przez wybranie 9 jako osi. Wreszcie mamy naszą posortowaną tablicę z elementami umieszczonymi w indeksie podkreślenia.
Uwaga- Ważną kwestią do zrozumienia tutaj jest to, że wszystkie operacje odbywają się w tej samej tablicy. Nowe tablice nie są tworzone.
Pseudokod do Quicksort w C ++
QuickSort (array [], start_index, end_index) {if (start_indexProgram Quicksort w C ++
Zrozumieliśmy algorytm i rozwinęliśmy głębokie zrozumienie działania algorytmu. Zaimplementujmy Quicksort w C ++ i napiszmy program do sortowania tablicy.
#include using namespace std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int Partition (int array [], int start_index, int end_index) {int pivot = tablica [end_index] int i = (start_index - 1) for (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>Koszt NumberofElements<<'Enter the elements one by one: ' for(i=0i>Witaj [i]} quickSort (Hello, 0, NumberofElements-1) printArray (Hello, NumberofElements) return 0}Wynik:
Złożoność czasowa
Porozmawiajmy o najważniejszym aspekcie każdego algorytmu sortowania, czyli o złożoności czasowej. Mówi nam o wydajności algorytmu w różnych scenariuszach. Te wartości mogą nam pomóc w podjęciu decyzji, czy możemy użyć tego algorytmu w naszej aplikacji.
- Najlepszy przypadek Na)
- Średnia wielkość (nlogn)
- Najgorszy przypadek- Na2)
Na tym kończymy ten artykuł Quicksort w C ++. Jeśli chcesz dowiedzieć się więcej, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online. Szkolenie i certyfikacja J2EE i SOA firmy Edureka ma na celu przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji języka Java, a także różnych struktur Java, takich jak Hibernate i Spring.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy na tym blogu, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.