최소 힙을 작성하려고합니다. 나는 이미 삽입, 삭제, 스왑, 업 힙, 다운 힙을 수행했으며 올바르게 작동하고있다.최소 Heapify 메서드 - 최소 힙 알고리즘
그러나 Min-Heapify에 대한 방법을 쓰려고합니다. 여기
내 입력 : {20,14,9,6,4,5,1}
나는 분 힙 될 것으로 예상 출력 : {1,5,4,20, 9,6,14} 하지만 내가 가진 것은 : 반대의 {14,6,9,20,4,5,1}입니다.
public void minHeapify(int parentIndex)
{
int left = getLeft(parentIndex);
int right = getRight(parentIndex);
int smallest = parentIndex;
if(_size >right && _heapArray[left]<_heapArray[parentIndex])
{
smallest = left;
}
if(_size>left && _heapArray[right]<_heapArray[parentIndex])
{
smallest = right;
}
if(smallest !=parentIndex)
{
replace(parentIndex, smallest);
minHeapify(smallest);
}
}
내가 왼쪽 아이를 확인하기 위해 예상되는 부분에 오타가있는 MAX-Heapify
Heapify (A, i)
l ← left [i]
r ← right [i]
if l ≤ heap-size [A] and A[l] > A[i]
then largest ← l
else largest ← i
if r ≤ heap-size [A] and A[i] > A[largest]
then largest ← r
if largest ≠ i
then exchange A[i] ↔ A[largest]
Heapify (A, largest)
도움을 주셔서 감사합니다. 지금 일하고있다. –
굉장합니다. 그것이 모든 것을 지금 듣게되어 기쁘다. – angelatlarge