0
我想創建一個數組的二進制堆。我已成功地與buildHeap
和heapify
堆成一堆。我的問題是當我嘗試insert
一個新的元素到陣列中,當我嘗試與heapSort
分類。插入並堆到堆用數組構建
以下是我對heapify
功能:
void heap::Heapify(int arr[], int i){
int largest = i;
int L = LeftChild(i);
int R = RightChild(i);
if (L <= heapSize && arr[L] > arr[i])
largest = L;
else{
largest = i;
}
if (R <= heapSize && arr[R] > arr[largest]){
largest = R;
}
if(largest != i){
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
Heapify(arr, largest);
}
}
這裏是我的buildHeap
功能:
void heap::BuildHeap(int arr[]){
for(int i = (heapSize/2)-1; i >= 0; i--){
Heapify(arr, i);
}
}
這兩項職能的工作,而下面沒有工作,用於插入它沒有插入到適當的位置。
這裏是insert
功能:
void heap::Insert(int arr[], int key){
heapSize++;
int i = heapSize - 1;
while(i > 0 && arr[Parent(i)] <= key){
arr[i] = arr[Parent(i)];
i = Parent(i);
}
arr[i] = key;
}
隨着heapSort
函數它被排序它在大多數情況下,但將打印它像這樣(第一行是堆是排序前):
32 24 5 19 23 4 3 11 2 12
5 2 4 3 23 19 32 11 24 12
,這裏是我的heapSort
功能:
void heap::HeapSort(int arr[]){
for(int i = heapSize - 1; i >= 0; i--){
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapSize = heapSize - 1;
Heapify(arr, 0);
}
}
任何幫助來確定這兩個功能如何不正常工作將不勝感激。
看起來像一個簡單的調試任務。如果您嘗試交換兩個值,但交換後兩者都相同,而另一個值丟失,那就太糟糕了。對於一個合適的[mcve],我希望能夠複製粘貼到我的編譯器中,並獲得相同的問題。 –
你真的應該回顧一下二進制堆的理論。序列32 24 5 19 23 4 3 11 2 12看起來不是有效的內容。堆排序不會對堆的內部數據進行排序,而是會逐個提取最小/最大值。 – jszpilewski
'arr [i] = arr [Parent(i)];'也許應該是'std :: swap(arr [i],arr [Parent(i)])'' – AndyG