Törpe válogatás

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. június 1-jén felülvizsgált verziótól ; az ellenőrzéshez 1 szerkesztés szükséges .

A Gnome sort ( eng.  Gnome sort ) egy rendezési algoritmus , amely hasonló a beszúrások szerinti rendezéshez , de az utóbbitól eltérően a megfelelő helyre történő beszúrás előtt egy sor csere történik, mint a buborékos rendezésnél . A név a kerti törpék feltételezett viselkedéséből származik, amikor a kerti edények sorát rendezik.

A törpe válogatás a közönséges holland kerti törpe ( holland  tuinkabouter ) technikáján alapul. Ez az a módszer, amellyel a kerti törpe virágcserepek sorát rendezi. Lényegében a jelenlegi és a korábbi kerti edényeket nézi: ha a megfelelő sorrendben vannak, akkor egy cserépedényt előre lép, ellenkező esetben felcseréli őket, és egy cserepet hátralép. Peremfeltételek: ha nincs előző pot, előre lép; ha nincs következő pot, akkor kész.
Dick Grun

Az algoritmus elvileg egyszerű, és nem igényel beágyazott hurkokat. Munkaidő . A gyakorlatban az algoritmus olyan gyorsan futhat, mint a beillesztési rendezés.

Az algoritmus megtalálja az első helyet, ahol két szomszédos elem rossz sorrendben van, és felcseréli őket. Kihasználja azt a tényt, hogy egy csere közvetlenül a felcserélt elemek előtt vagy után tud rossz sorrendben új párt produkálni. Nem teszi lehetővé az aktuális pozíció utáni elemek rendezését, így csak az átrendezett elemek előtti pozíciót kell ellenőrizni.

Leírás

Alul a rendezési pszeudokód látható. Ez egy optimalizált verzió, amely a j változót használja , hogy lehetővé tegye az előreugrást oda, ahol abbahagyta, mielőtt balra mozdulna, elkerülve a szükségtelen iterációkat és összehasonlításokat:


gnomeSort(a[0..méret - 1]) i = 1; j = 2; míg én < méret ha a[i - 1] > a[i] //ha növekvő sorrendbe szeretné rendezni, módosítsa az összehasonlító jelet <-ra i = j; j = j + 1; más cserélje fel a[i - 1] és a[i] i = i-1; ha i == 0 i = j; j = j + 1;

Példa:

Ha egy [4] [2] [7] [3] elemű tömböt a legnagyobbtól a legkisebbig szeretnénk rendezni, akkor a while ciklus iterációi során a következő történik:

Optimalizálás

A gnome optimalizálás eredményeként a rendezés természetesen átalakul beszúrásos rendezéssé . Minden alkalommal, amikor a "gnome" új számot talál, a "gnome" bal oldalán lévő összes érték már rendezve van.

Linkek