„Kupacrendezés” változatai közötti eltérés

A Wikipédiából, a szabad enciklopédiából
[nem ellenőrzött változat][nem ellenőrzött változat]
Tartalom törölve Tartalom hozzáadva
aNincs szerkesztési összefoglaló
Luckas-bot (vitalap | szerkesztései)
a Bot: következő hozzáadása: cs, de, es, fa, fr, he, is, it, ja, ko, lb, lt, ml, nl, no, pl, pt, ru, sl, tr, uk, vi, zh
14. sor: 14. sor:


[[Kategória:Rendezési algoritmusok]]
[[Kategória:Rendezési algoritmusok]]

[[en:Heapsort]]
[[en:Heapsort]]
[[cs:Heapsort]]
[[de:Heapsort]]
[[es:Heapsort]]
[[fa:مرتب‌سازی هرمی]]
[[fr:Tri par tas]]
[[he:מיון ערימה]]
[[is:Hrúguröðun]]
[[it:Heap sort]]
[[ja:ヒープソート]]
[[ko:힙 정렬]]
[[lb:Heapsort]]
[[lt:Krūvos rikiavimo algoritmas]]
[[ml:ഹീപ് സോർട്ട്]]
[[nl:Heapsort]]
[[no:Sorteringsalgoritme#Heap sort]]
[[pl:Sortowanie przez kopcowanie]]
[[pt:Heapsort]]
[[ru:Пирамидальная сортировка]]
[[sl:Urejanje s kopico]]
[[tr:Yığın sıralaması]]
[[uk:Пірамідальне сортування]]
[[vi:Sắp xếp vun đống]]
[[zh:堆積排序]]

A lap 2010. február 13., 09:19-kori változata

A kupacrendezés összehasonlító rendezési algoritmus, és a kiválasztó rendezések családjába tartozik. Helyben rendező, nem stabil rendezés.

Áttekintés

A kupacrendezés nevének megfelelően egy kupac felépítésével kezdődik. Az adatok felhasználásával létrehozunk egy kupacot, majd eltávolítjuk a legnagyobb elemet. A gyökérelem törlésével elromlott a kupac tulajdonság, ezt helyre kell állítanunk. Az elem törlése lehetséges úgy is, hogy a kupac legalsó szintjének jobb szélső elemével cserélünk, és az új jobb szélső elemet nem tekintjük a kupac részének. A helyreállítás úgy lehetséges, hogy az eredeti jobb szélső elemet a gyökérbe helyezzük, majd süllyesztjük. Az utóbbi változatban ez megegyezik a gyökérelem süllyesztésével. A süllyesztés a szülő elemet mindig a nagyobbik, illetve a jobb oldali gyerekkel cseréli, ha van ilyen, és nagyobb a szülőnél. Az algoritmus ezután mindig eltávolítja a következő legnagyobb, azaz a gyökérben található elemet, és helyreállítja a kupac tulajdonságot. Ha a kupacrendezés helyesen, tömbbel kerül implementálásra, és a jobb szélső elemmel való törlést választjuk, a tömb rendezett lesz, és nincs szükség az eredeti tömbnél több memóriára.

A kupac tulajdonság feltételezi, hogy minden szülő elem nagyobb, vagy azonos értékű, mint gyerekei. Ennek megfordításával minimális gyökerű kupacot kapunk, és csökkenően rendezett tömböt készíthetünk a fenti algoritmussal.

Összehasonlítás más rendezésekkel

A kupacrendezés a gyorsrendezéshez hasonló hatékonysággal rendelkezik. A gyorsrendezés általában valamivel gyorsabb, viszont legrosszabb esetben futásideje elérheti a Θ(n2) nagyságrendet. Bizonyos adatmennyiség felett a négyzetes futásidő elfogadhatatlan, a gyorsrendezés implementációjának ismeretében pedig könnyen elérhető, ezzel csökkentve az algoritmus biztonságát. Mivel a kupacrendezés nagyságrendje Θ(n log n) marad, jellemzően ezt az algoritmust választják a gyorsrendezéssel szemben azokban a rendszerekben, ahol a biztonság meghatározó tényező.

A kupacrendezés szembeállítható az összefésülő rendezéssel is. Időigényük hasonló, memóriaigényben az összefésülő rendezés rosszabbul állhat. Az összefésülő rendezés rendelkezik néhány előnnyel a kupacrendezéshez képest:

  • Az összefésülő rendezés stabil rendezés.
  • Az összefésülő rendezés könnyebben és hatékonyabban párhuzamosítható.