Mã giả
Bài học 4 trên 9 trong khóa học Heap Sort, chuỗi DSA của 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 đẩy nút cha quá nhỏ xuống dưới nút con lớn hơn cho đến khi khôi phục thuộc tính đống tối đa.
sizecho biết phần nào của mảng vẫn thuộc đống. - Giai đoạn xây dựng: sàng xuống mọi nút không phải nút lá (từ nút cha cuối cùng, chỉ số
n/2 - 1, lên đến nút gốc) sẽ biến bất kỳ mảng nào thành đống tối đa. - Giai đoạn sắp xếp: mỗi bước đưa giá trị lớn nhất hiện tại về cuối và thu nhỏ đống, vì vậy mảng được sắp xếp dần từ phía sau.
Tự làm thử
Bài học này không có thử thách code.
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Heap Sort, chuỗi DSA
Tự luyện tập: Trình biên dịch C online