Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Rekurzív gyorsrendezés nemrekurzív változata

479
Sziasztok!
Ha valaki tudna segíteni, hogy az alábbi rekurzív gyorsrendezésnek (amit képként is csatoltam) mi a nemrekurzív gyorsrendezéses megfelelője?

Válaszokat nagyon köszönöm!
Jelenleg 1 felhasználó nézi ezt a kérdést.
Algoritmus, rendezés
0
Felsőoktatás / Informatika

Válaszok

3
Tipikusan azt szokták csinálni, hogy egy alkalmas adatszerkezetben (kézenfekvően egy veremben) tartják nyilván, hogy melyik résztömb feldolgozása következik. Tehát amikor a rekurzív implementációban meghívjuk a függvényt egy résztömbre, akkor az iteratív implementációban betesszük a résztartományt a verembe. Addig dolgozunk, amíg ki nem ürül a verem.

Megírtam mindkét megoldást Pythonban. A quicksort1 függvény a rekurzív változat, ez teljesen megfelel a papíron leírtaknak. A quicksort2 pedig ennek az iteratív változata. A kód nem a leghatékonyabb (főleg a veremként használt lista folyamatos átméretezgetése miatt), de a didaktikai célnak megfelel.

Itt találod a kódot: https://pastebin.com/GfJp9FWc
1

Nem reménykedtem, hogy itt kapok választ egy ilyen kérdésre. De köszönöm nagyon! :)

Így már valamennyire tisztább a dolog, hogy hogyan is kellene csinálni!

Órán oldottunk meg egy feladatott ahol egy ilyen rekurzív gyorsrendezés lépéseit kellett leírni, és persze feltüntetni az adatsor állapotát minden egyes elemcsere után:

Feldolgozandó bemenő tömb: 6, 2, 8, 7, 4, 3, 5, 1

(S: strázsa elem, azaz középérték.K kezdőindex? V végindex?)

K S V Cserék:
6, 2, 8, 7, 4, 3, 5, 1 8,1
6, 2, 1, 7, 4, 3, 5, 8 7,5
6, 2, 1, 5, 4, 3, 7, 8 6,1
1, 2, 6, 5, 4, 3, 7, 8 6,3
1, 2, 3, 5, 4, 6, 7, 8 5,4
1, 2, 3, 5, 4, 6, 7, 8

Így nézett ki a megoldás, (de csatoltam ugyanezt képként is, hátha jobban látható.)

Na most ha ugyanezt az adatsort szeretném rendezni nemrekurzív gyorsrendeezéssel, akkor tudnál segíteni minden fognak változni az adatsor állapotai az egyes elemcserék után?

Próbálgattam..de nem nagyon jött össze a dolog sajnos.

Pythonban bár annyira nem vagyok jártas, de most tanulmányozom a kódod, hátha még jobban megértem a dolgokat.Nagyon köszönöm! :)
Módosítva: 4 éve
0

Ugyanazok a rendezés lépései mindkét implementációban. Illetve az én kódomban most pont nem, mert a rekurzív változat előbb rendezi az első résztömböt, utána a másodikat, az iteratív változat pedig fordítva. Ezt most megcseréltem, illetve beletettem, hogy kiírja a lépéseket:
https://pastebin.com/Fq74yuSD

Itt ki is tudod próbálni a kódot, látni fogod, hogy ugyanúgy fut a két verzió:
https://www.onlinegdb.com/online_python_interpreter
1