Menu
Coddy logo textTech

Pseudo Code

Coddyの「ヒープソート - DSAシリーズ」コースのレッスン 4/9。

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:   # 最大ヒープを構築
      siftDown(array, i, n)
   for end from n-1 down to 1:     # 最大値を繰り返し抽出
      swap array[0] and array[end]
      siftDown(array, 0, end)
  • siftDown は、最大ヒープの特性が復元されるまで、小さすぎる親をその大きな子よりも下に押し下げます。size は、配列のどの範囲がまだヒープの一部であるかを表します。
  • 構築フェーズ: すべての非葉ノード(最後の親であるインデックス n/2 - 1 からルートまで)を sift down することで、任意の配列を最大ヒープに変換します。
  • ソートフェーズ: 各ステップで現在の最大値を末尾に移動し、ヒープを縮小します。これにより、配列は後ろから順にソートされた状態で埋まっていきます。

自分で試してみよう

このレッスンにはコードチャレンジは含まれていません。

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ヒープソート - DSAシリーズのすべてのレッスン