3

私はソフトウェア開発者のインタビューの準備をしており、アルゴリズムの問​​題に取り組んでいます。私の本は、順序付けられていない配列を昇順でソートできる Heapsort アルゴリズムを示しています。最小ヒープでソートできるように変更しようとしています。しかし、コードのロジックに従うと、配列が正しくソートされません。私のコード (疑似コード) の何が問題になっていますか?

The array to be sorted: 16, 14, 10, 8, 7, 9, 3, 2, 4, 1

max-heapify を使用した本のヒープソート アルゴリズム:

HEAPSORT(A)
  BUILD-MAX-HEAP(A)
    for i = A.length down to 2
      swap A[1] with A[i]
      A.heapsize = A.heapsize - 1
      MAX-HEAPIFY(A, 1)

MAX-HEAPIFY(A)
  l = Left(i)
  r = Right(i)
  if l <= A.heapsize and A[l] > A[i]
    largest = l
  else
    largest = i
  if r <= A.heapsize and A[r] > A[largest]
    largest = r
  if largest != i
    swap A[i] with A[largest]
    MAX-HEAPIFY(A, largest)

min-heapify を使用して変更したコード:

HEAPSORT(A)             // where A is an array
  BUILD-MIN-HEAP(A)
    for i = A.length down to 2
      swap A[1] with A[i]
      A.heapsize = A.heapsize + 1
      MIN-HEAPIFY(A, 1)

MIN-HEAPIFY(A, i)
  l = Left(i)
  r = Right(i)
  if l <= heapsize.A and A[l] < A[i]
    smallest = l
  else
    smallest = i
  if r <= heapsize.A and A[r] < A[smallest]
    smallest = r
  if smallest != i
    swap A[i] with A[smallest]
    MIN-HEAPIFY(A, smallest)
4

1 に答える 1