Menu
CoddyTech

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. size cho 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.

quiz iconTự kiểm tra

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