A Heap sort ( eng. Heapsort , “Heap sort” [1] ) egy olyan rendezési algoritmus , amely a legrosszabb, átlagosan és a legjobb esetben (vagyis garantáltan) működik az elemek rendezésekor végzett műveleteknél. [2] A felhasznált háttérmemória mennyisége nem függ a tömb méretétől (vagyis ).
Felfogható a buborékrendezés továbbfejlesztéseként , amelyben egy elem több útvonalon lebeg ( min-heap ) / süllyed ( max-heap ).
A Heapsort J. Williams javasolta 1964-ben. [egy]
A Heapssort bináris rendezési fát használ . A válogatófa olyan fa, amely megfelel a következő feltételeknek:
A rendezési fa kényelmes adatszerkezete egy olyan tömb Array, amely Array[0] a gyökérben lévő elem, az elem gyermekei Array[i]pedig Array[2i+1]és Array[2i+2].
A rendezési algoritmus két fő lépésből áll:
1. Építse fel a tömb elemeit rendezési fa formájában! :
at .
Ez a lépés műtétet igényel.
2. Egyenként távolítjuk el az elemeket a gyökérből, és újjáépítjük a fát. Azaz első lépésben kicseréljük Array[0]és Array[n-1], Array[0], Array[1], … , Array[n-2]válogatófává alakítjuk. Ezután átrendezzük Array[0]és Array[n-2], Array[0], Array[1]… , Array[n-3]válogatófává alakítjuk. A folyamat addig folytatódik, amíg már csak egy elem marad a rendezési fában. Ekkor Array[0], Array[1], … , Array[n-1] egy rendezett sorozat.
Ez a lépés műtétet igényel.
Előnyök
Hibák
Az O ( n ) memóriaigényes egyesítési rendezés gyorsabb ( kisebb konstans mellett), és nem romlik le rossz adatok esetén.
Az algoritmus bonyolultsága miatt az erősítést csak nagy n esetén kapjuk meg . Kis n - en (több ezerig) a Shellsort gyorsabb .
A "halom rendezés" algoritmust aktívan használják a Linux kernelben .
Rendezési algoritmusok | |
---|---|
Elmélet | Bonyolultság O jelölés Rendelési viszony Típusok rendezése fenntartható Belső Külső |
Csere | |
Választás | |
Betétek | |
egyesülés | |
Nincs összehasonlítás | |
hibrid | |
Egyéb | |
nem praktikus |