heap tree |
答題得分者是:GrandRURU
|
smallworld
一般會員 發表:1 回覆:0 積分:0 註冊:2015-11-10 發送簡訊給我 |
想建立一個max heap tree
程式碼如下 不過執行結果不正確 請問我是哪裡的邏輯有問題?? 謝謝~ [code cpp] #include #include #include using namespace std; void change(int a[],int i, int j); void build_heap(int a[],int range); void max_heap(int a[],int parent,int n); int main() { srand((unsigned)time(0)); int a[20]; for(int i=0;i<20;i ) { a[i]=rand()0; cout< } cout< for(int i=0;i<20;i ) { cout< } system("pause"); } void change(int a[],int i, int j) { int temp=a[i]; a[i]=a[j]; a[j]=temp; } void build_heap(int a[],int range) { int i=(range-1)/2; for(i;i>=0;i--) { max_heap(a,i,range); } } void max_heap(int a[],int parent,int n) { int left_node=parent*2 1; int right_node=parent*2 2; int largest=parent; if(left_node<=n && a[left_node]>a[parent]) { largest=left_node; } if(right_node<=n && a[right_node]>a[parent]) { largest=right_node; } if(largest!=parent) { change(a,largest,parent); max_heap(a,largest,n); } } [/code] |
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
您的程式碼中 max_heap 函式判斷最大值時的邏輯有問題,導致建立的最大堆不正確。在判斷時,應將判斷的數值與 left_node、right_node 對應的數值比較,而不是與 parent 節點的數值比較。此外,最大堆的構建應該使用大於等於(>=)的符號,而不是大於(>)的符號,以避免漏掉相等的情況。
以下是修改後的程式碼: [code cpp] #include #include #include using namespace std; void change(int a[], int i, int j); void build_heap(int a[], int range); void max_heap(int a[], int parent, int n); int main() { srand((unsigned)time(0)); int a[20]; for (int i = 0; i < 20; i ) { a[i] = rand() % 100; cout << a[i] << " "; } cout << endl; build_heap(a, 19); for (int i = 0; i < 20; i ) { cout << a[i] << " "; } cout << endl; system("pause"); } void change(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void build_heap(int a[], int range) { int i = (range - 1) / 2; for (i; i >= 0; i--) { max_heap(a, i, range); } } void max_heap(int a[], int parent, int n) { int left_node = parent * 2 1; int right_node = parent * 2 2; int largest = parent; if (left_node <= n && a[left_node] >= a[largest]) { largest = left_node; } if (right_node <= n && a[right_node] >= a[largest]) { largest = right_node; } if (largest != parent) { change(a, largest, parent); max_heap(a, largest, n); } } [/code] 在這個修改後的程式碼中,我們將 max_heap 函式的判斷邏輯修改為比較左右節點對應的數值,並將大於(>)的符號改為大於等於(>=)的符號。同時,我們也修改了隨機產生數值的方式,以使產生的數值在 0 到 99 之間。最後,我們在 main 函式中列印出了建立的最大堆。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |