Vše, co potřebujete vědět o Quicksortu v C ++



Tento článek vám poskytne podrobné a komplexní znalosti o tom, jak implementovat Quicksort v C ++ s příklady.

Existuje spousta třídicích algoritmů. Nalezení vhodnosti pro vaši aplikaci je úkol, který vyžaduje krátké pochopení faktorů, jako je výkon, časová složitost, délka kódu atd. Konkrétního algoritmu. V tomto příspěvku se podíváme na všechny základní koncepty potřebné k implementaci Quicksort v C ++ v následujícím pořadí:

Porozumění algoritmu Quicksort

Stejně jako Sloučit třídění „Quicksort se řídí strategií rozděl a panuj. Použitím strategie rozděl a panuj rozdělíme problém na mnoho dílčích problémů a řešíme je rekurzivně. Nejprve krok za krokem pochopíme celý proces a poté pomocí příkladu získáme hluboké pochopení celého procesu.





rozdíl mezi hashmapou a hashtable
  1. Nejprve požádáme uživatele o netříděné pole.

  2. Jakmile máme naše netříděné pole, musíme z něj vybrat pivotní hodnotu. Můžeme zvolit libovolnou hodnotu.



  3. Jakmile vybereme bod otáčení, musíme uspořádat ostatní prvky pole takovým způsobem, aby všechny prvky menší než hodnota pivot byly umístěny napravo od hodnoty pivot a všechny prvky větší než pivot hodnota se umístí napravo od kontingenční hodnoty.

  4. Provádíme krok 3, dokud nezískáme seřazené pole.

Podívejme se nyní na příklad a implementujme algoritmus a podívejme se, jak funguje.



Dobrý den [5, 4, 1, 11, 9, 6, 2, 3], v tomto příkladu budeme vždy považovat pivot za nejpravější prvek seznamu.

Quicksort v C ++

Pojďme projít každým krokem a pochopit logiku, kterou jsme použili k vyřešení problému.

  • Nejprve jsme vybrali „3“ jako náš pivot a uspořádali jsme všechny prvky menší než „3“ vpravo a všechny prvky větší než „3“ vpravo.

  • V tomto okamžiku máme 2 dílčí problémy. Pojďme nejprve vyřešit dílčí problém napravo. Jeden jsme vybrali jako náš pivot a umístili jsme „2“ doprava.

  • Abychom vyřešili druhý dílčí problém, zvolíme jako náš pivot „6“ a umístíme prvky, jak jsme diskutovali dříve.

  • Máme další 2 dílčí problémy. První je vyřešen výběrem 4 jako otočného čepu a druhý je vyřešen výběrem 9 jako otočného čepu. Nakonec máme seřazené pole s prvky umístěnými v indexu podtržení.

Poznámka- Zde je důležité pochopit, že všechny operace probíhají ve stejném poli. Nová pole nejsou vytvořena.

Pseudokód pro Quicksort v C ++

QuickSort (pole [], start_index, end_index) {if (start_index

Program Quicksort v C ++

Pochopili jsme algoritmus a vyvinuli jsme hluboké porozumění fungování algoritmu. Pojďme implementovat Quicksort v C ++ a napsat program pro třídění pole.

#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 = pole [end_index] int i = (start_index - 1) pro (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<>NumberofElements náklady<<'Enter the elements one by one: ' for(i=0i>Hello [i]} quickSort (Hello, 0, NumberofElements-1) printArray (Hello, NumberofElements) return 0}

Výstup:

Časová složitost

Pojďme si promluvit o nejdůležitějším aspektu jakéhokoli třídicího algoritmu, tj. Časové složitosti. Říká nám to o výkonu algoritmu v různých scénářích. Tyto hodnoty nám mohou pomoci při rozhodování, zda můžeme tento algoritmus použít pro naši aplikaci.

  • Nejlepší případ- Na)
  • Průměrný případ (nlogn)
  • Nejhorší případ- Na2)

S tímto se dostáváme na konec tohoto článku Quicksort v C ++. Pokud se chcete dozvědět více, podívejte se na Edureka, důvěryhodná online vzdělávací společnost. Školicí a certifikační kurz Edureka Java J2EE a SOA je navržen tak, aby vás vyškolil jak pro základní, tak pro pokročilé koncepty Java spolu s různými rámci Java, jako je Hibernate & Spring.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů tohoto blogu a my se vám ozveme co nejdříve.