Pseudocode
Pelajaran 4 dari 9 dalam kursus Heap Sort, Seri DSA di Coddy.
siftDown(array, i, size):
loop:
largest = i
left = 2*i + 1
right = 2*i + 2
if left < size and array[left] > array[largest]: largest = left
if right < size and array[right] > array[largest]: largest = right
if largest == i: stop
swap array[i] and array[largest]
i = largest
heapSort(array):
n = length(array)
for i from n/2 - 1 down to 0: # build max-heap
siftDown(array, i, n)
for end from n-1 down to 1: # extract max repeatedly
swap array[0] and array[end]
siftDown(array, 0, end)- siftDown mendorong parent yang terlalu kecil melewati child yang lebih besar hingga property max-heap dipulihkan.
sizemenunjukkan seberapa banyak bagian array yang masih menjadi bagian dari heap. - Fase pembangunan: melakukan sift down pada setiap node non-leaf, dari parent terakhir, indeks
n/2 - 1, hingga root, mengubah array apa pun menjadi max-heap. - Fase pengurutan: setiap langkah memindahkan nilai maksimum saat ini ke bagian akhir dan mengecilkan heap, sehingga array terisi dalam keadaan terurut dari belakang.
Coba sendiri
Pelajaran ini tidak memiliki tantangan kode.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Heap Sort, Seri DSA
Latihan sendiri: Compiler C online