Heap Sort
Heap Sort
Heap Sort
HeapSort adalah algoritma pengurutan data berdasarkan perbandingan, dan termasuk golongan
selection sort. Walaupun lebih lambat daripada quick sort pada kebanyakan mesin , tetapi heap sort
mempunyai keunggulan yaitu kompleksitas algoritma pada kasus terburuk adalah n log n.
Algoritma pengurutan heap sort ini mengurutkan isi suatu larik masukan dengan memandang
larik masukan sebagai suatu Complete Binary Tree (CBT). Setelah itu Complete Binary Tree (CBT)
ini dapat dikonversi menjadi suatu heap tree. Setelah itu Complete Binary Tree (CBT) diubah menjadi
suatu priority queue.
Algoritma pengurutan heap dimulai dari membangun sebuah heap dari kumpulan data yang
ingin diurutkan, dan kemudian menghapus data yang mempunyai nilai tertinggi dan menempatkan
dalam akhir dari larik yang telah terurut. Setelah memindahkan data dengan nilai terbesar, proses
berikutnya adalah membangun ulang heap dan memindahkan nilai terbesar pada heap tersebut dan
menempatkannya dalam tempat terakhir pada larik terurut yang belum diisi data lain. Proses ini
berulang sampai tidak ada lagi data yang tersisa dalam heap dan larik yang terurut penuh. Dalam
implementasinya kita membutuhkan dua larik satu untuk menyimpan heap dan satu lagi untuk
menyimpan
data
yang
sudah
terurut.
Tetapi untuk optimasi memori, kita dapat menggunakan hanya satu larik saja.
Yaitu dengan cara menukar isi akar dengan elemen terakhir dalam heap tree.
Jika memori tidak menjadi masalah maka dapat tetap menggunakan dua larik yaitu larik masukan dan
larik hasil.
Algoritma Untuk Heap Sort
Berikut merupakan algoritma dari heap sort :
1.
Representasikan Heap dengan n elemen dalam sebuah array A[n]
2.
3.
4.
5.
6.
7.
8.
validitas RBT :
1.
2.
3.
4.
5.
7.
8.
1.
2.
3.
4.
5.
Tree dikatakan setimbang jika selisih level dari anak kiri dan anak kanan maksimal dua.
Node dibawah root yang berada pada level yang sama disebut sibling.
Aturan Insert pada Red Black Tree :
Setiap node baru yang disisipkan kedalam tree akan diberi warna merah.
Jika kita memberi warna hitam pada node baru yang masuk, maka jumlah node dari root akan
berbeda.
Jika kita memasukkan node baru yang berwarna merah kedalam parent yang berwarna hitam tidak
akan menjadi masalah, yang menjadi masalah adalah jika kita menyisipkan node baru ke dalam parent
yang berwarna merah
Jika parent berwarna merah kita akan membuat dua node merah yang berurutan, jadi kita harus
melakukan rotasi atau pewarnaan ulang.
Hal penting yang harus diingat adalah node yang tidak mempunyai daun harus berwarna hitam.