私はソフトウェア開発者のインタビューの準備をしており、アルゴリズムの問題に取り組んでいます。私の本は、順序付けられていない配列を昇順でソートできる 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)