Sebagai bagian dari tugas pekerjaan rumah yang mencakup implementasi introsort saya ditanya mengapa heapsort digunakan daripada algoritma mergesort (atau lainnya dalam hal ini.
Introsort adalah algoritma pengurutan hibrida yang memberikan kinerja rata-rata cepat dan (terburuk) kinerja kasus terburuk yang optimal. Ini dimulai dengan quicksort dan beralih ke heapsort ketika kedalaman rekursi melebihi level berdasarkan (logaritma) jumlah elemen yang diurutkan. ( Wikipedia , diambil 2014-Mei-06.)
Satu-satunya alasan yang bisa saya pikirkan adalah heapsort "ada di tempat" ... Tapi tbh saya tidak begitu mengerti mengapa ini penting di sini.
algorithms
algorithm-analysis
sorting
pengguna672009
sumber
sumber
Jawaban:
2 kelemahan Quicksort adalah bahwa ia membutuhkan ruang ekstra (untuk menjaga interval yang tidak disortir) dan pemilihan pivot yang buruk (atau urutan yang dirancang untuk membuat Anda memilih pivot yang buruk) dapat menyebabkannya menjadi O ( n 2 ) waktu dan O ( n ) algoritma ruang ekstra.O(logn) O(n2) O(n)
Beralih ke heapsort ketika kedalaman rekursi menjadi terlalu besar (di sekitar ) berarti kami memiliki upperbound yang dijamin yaitu O ( n log n ) waktu dan O ( log n ) ruang ekstra.logn O(nlogn) O(logn)
Heapsort's kebutuhan ruang tambahan membuatnya menjadi pilihan yang lebih baik untuk mergsort's O ( n ) di mana untuk array yang dibuat yang n masih bisa besar.O(1) O(n) n
Alasan heapsort tidak digunakan untuk pengurutan penuh adalah karena lebih lambat daripada quicksort (sebagian karena konstanta tersembunyi dalam ekspresi O besar dan sebagian karena perilaku cache)
sumber