Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
Ako rýchleho výbežku s výberom prvého prvku funguje:
1. Výber piva: Algoritmus vždy vyberie prvok * prvého * v (sub) poli ako otočenie. Toto je kľúčový rozdiel od ostatných stratégií výberu čapov.
2. rozdelenie: Cieľom je usporiadať pole tak, aby:
* Všetky prvky * menšie ako alebo sa rovnajú * Pivot sú vľavo od čapu.
* Všetky prvky * väčšie ako * Pivot sú napravo od pivotu.
Tu je bežný prístup k rozdeleniu (pomocou dvoch ukazovateľov, `i` a` j`):
* `Začínam na prvku * po * Pivot (zvyčajne index 1).
* `j` začína na poslednom * prvku (sub) poľa.
* Slučka pokračuje tak dlho, ako `i <=j`:
* Prírastok `i`, kým nenájdete prvok` arr [i] `, ktorý je * väčší ako * pivot.
* Zníženie `j`, kým nenájdete prvok` arr [j] `, ktorý je * menší alebo rovný * Pivot.
* Ak `i
3. rekurzia: Algoritmus sa rekurzívne nazýva na dvoch podprúdoch:
* Podprúd do * ľavého * (teraz triedeného) čapu.
* Podprúd k * právu * (teraz triedený) otočného otočného otočného otočenia.
Príklad:
Povedzme, že máme pole:`[7, 2, 1, 6, 8, 5, 3, 4]`
1. Výber piva: Pivot =`7` (prvý prvok)
2. rozdelenie:
* Počiatočné:`[7, 2, 1, 6, 8, 5, 3, 4]`
* `Začínam o 2,` j` začína o 4.
* `Pohybujem sa, kým nenájde 8 (čo je> 7).
* `j` sa pohybuje, kým nenájde 4 (čo je <=7).
* Swap 8 a 4:`[7, 2, 1, 6, 4, 5, 3, 8]`
* `Pohybujem sa, kým nenájde 5.
* `j` sa pohybuje, kým nenájde 3.
* Swap 5 a 3:`[7, 2, 1, 6, 4, 3, 5, 8]`
* `Pohybujem sa, kým nenájde 5.
* `j` sa pohybuje, kým nenájde 3 (opäť).
* i> =j. Swap Pivot (7) s arr [j] (3):`[3, 2, 1, 6, 4, 7, 5, 8]`
* Pivot (7) je teraz v správnej polohe.
3. rekurzia:
* Quicksort sa volá `[3, 2, 1, 6, 4]`
* Quicksort sa volá `[5, 8]`
Vizualizačné úvahy:
Vizualizácia by musela ukázať:
* Zvýraznenie pivotu: Jasne uveďte, ktorý prvok je v súčasnosti vybraný ako pivot. Zmena farby alebo vizuálna etiketa je bežná.
* Pohyb ukazovateľa: Vizuálne zobrazte ukazovatele „I“ a `j`, ktoré sa pohybujú po celom poli. Používajte šípky, rôzne farby alebo iné ukazovatele.
* swaps: Animujte výmenu prvkov. Napríklad tieto dva prvky by sa mohli „presunúť“ do pozícií druhých.
* Proces rozdelenia: Zdôraznite, ako sa prvky usporiadajú okolo čapu. To by mohlo zahŕňať sfarbenie prvkov, o ktorých je známe, že sú menšie alebo väčšie ako pivot.
* RECULSIVE HOVORY: Ukážte, ako sa pole rozdeľuje na podprúdy a ako sa algoritmus aplikuje na každú rekurzívne sub-array. To sa dá dosiahnuť vizuálnym „hniezdením“ reprezentácií poľa. Možno použite rôzne pozadie pre každú úroveň rekurzie.
* Zoradené prvky: Uveďte, ktoré prvky boli umiestnené v ich konečných zoradených pozíciách. Použite zreteľnú farbu alebo vizuálnu značku.
* Postupné vykonanie: Umožnite užívateľovi prejsť algoritmom jeden krok za druhým, aby mohli jasne vidieť každú akciu.
* Informácie o stave: Zobraziť aktuálne hodnoty `i`,` j` a ďalších relevantných premenných.
Vizualizačné technológie:
* JavaScript &Html5 Canvas: Populárna voľba pre webové vizualizácie. Knižnice ako D3.js alebo p5.js môžu pomôcť s vizuálnymi prvkami.
* python (s knižnicami ako pygame alebo matplolib): Pre stolné aplikácie.
* Ostatné grafické knižnice: V závislosti od prostredia by sa mohli použiť ďalšie knižnice, ako je spracovanie, QT alebo OpenGL.
Problém s výberom čapu prvého prvku
Aj keď je jednoduchý na implementáciu, vždy výber prvého prvku, pretože Pivot má významnú nevýhodu:
* Najhorší scenár: Ak je pole už triedené (alebo takmer zoradené) v stúpajúcom alebo zostupnom poradí, algoritmus degeneruje na (n^2) časovú zložitosť. Dôvodom je skutočnosť, že každý oddiel odstráni iba * jeden * prvok z podprúdu, čo vedie k veľmi nevyváženým oddielom.
Príklad najhoršieho prípadu:
Ak je pole `[1, 2, 3, 4, 5] a 1 je vždy čap:
1. Pivot =1. Rozdelenie vedie k `[1, 2, 3, 4, 5]` (1 je na správnom mieste).
2. Rekurzívne triedte “[2, 3, 4, 5]`
3. Pivot =2. Rozdelenie vedie k `[2, 3, 4, 5]` (2 je na správnom mieste).
4. Rekurzívne triedte `[3, 4, 5]`
... a tak ďalej.
Algoritmus sa stáva v podstate veľmi neefektívnym výberom výberu.
Ako vizualizácia pomáha:
Vizualizácia jasne demonštruje toto najhoršie správanie. Uvidíte proces rozdelenia, ktorý trvá dlho, kým sa pohybuje prvky, a rekurzívne hovory vytvárajú veľmi nevyvážené podprúdy. To je veľmi zrejmé, prečo táto jednoduchá stratégia výberu otočného výberu nie je v praxi najlepšou voľbou. Vizualizácia môže tiež ukázať, ako sa môžu vyhnúť tomuto najhoršiemu scenáru aj ďalšie metódy výberu čapu (napríklad výber náhodného prvku).