My first Magazine pemrograman-kompetitif-dasar | Page 129
10.2 Heap
2. Ulangi hingga seluruh data terurut menaik.
Pada selection sort, langkah pencarian elemen terkecil dilakukan dengan linear search.
Langkah ini bisa kita optimisasikan menggunakan struktur data heap , yang bisa mencari elemen
terkecil dengan kompleksitas logaritmik. Algoritma pengurutan menggunakan heap ini dinamakan
heapsort . Implementasinya ditunjukkan pada Algoritma 61.
Algoritma 61 Prosedur heapsort untuk mengurutkan array A dengan ukuran N secara menaik.
1:
2:
3:
4:
5:
6:
7:
procedure HEAPSORT (A, N)
MAKE H EAP (A, N)
for i ← 0, N − 1 do
A[i] ← TOP ()
POP ()
end for
end procedure
. Heap yang dibuat adalah min-heap
. Simpan elemen terkecil ke-i pada posisi ke-i
. Hapus elemen terkecil ke-i dari heap
Mari kita analisis kompleksitas dari algoritma heapsort . Sebagaimana dijelaskan pada bagian
sebelumnya, operasi MAKE H EAP memiliki kompleksitas waktu O(N). Kemudian, kita melakukan N
kali operasi POP , yang masing-masing memiliki kompleksitas waktu O(log N). Maka, kompleksitas
waktu dari algoritma heapsort adalah O(N + N log N) = O(N log N).
Heapsort memiliki kompleksitas waktu yang sama dengan quicksort maupun merge sort ,
yakni O(N log N). Namun, heapsort memiliki keuntungan yang tidak dimiliki keduanya, yaitu bisa
melakukan partial sort (pengurutan parsial).
Pengurutan parsial adalah aktivitas mengurutkan K elemen terkecil (atau terbesar) saja dari
suatu array . Selection sort juga bisa melakukan pengurutan parsial, namun membutuhkan waktu
O(NK). Dengan heapsort , untuk melakukan pengurutan parsial kita cukup melakukan operasi
POP sebanyak K kali saja. Kompleksitas waktunya menjadi O(N + K log N), yang lebih baik dari
O(NK).
119