2012-07-08 49 views
0

我正在使用一種簡單的方法將數組轉換爲堆自下而上的方式。我找不到這個錯誤。有人可以看一下,讓我知道。試圖實施heapify程序,找不到錯誤,我錯了我

基本上我是以自下而上的方式製作出一個隨機數組。

for(int i=n/2;i>=1;i--) 
     { 
        heapify(i,n,arr); 
     } 

heapify程序有一些問題,有時會給出正確的結果和大部分時間錯誤。

`#include<iostream> 
#include<conio.h> 
using namespace std; 
int min(i 
nt x,int y,int z) 
{ 
    return ((x>y?x:y)>z?(x>y?x:y):z); 
} 
int left(int i) 
{ 
    return (2*i);enter code here 
} 
int right(int i) 
{ 
    return (2*i+1); 
} 
int parent(int i) 
{ 
    return (i/2); 
} 
int heapify(int i,int n,int arr[]) 
{ 
    int temp; 
    int l=left(i); 
    int r=right(i); 
    temp=i; 
    if(l<=n&&arr[l]<arr[i]) 
    temp=l; 
    else if(r<=n&&arr[temp]>arr[r]) 
    temp=r; 
    if(temp!=i) 
    { 
       int x=arr[temp]; 
       arr[temp]=arr[i]; 
       arr[i]=x; 
       heapify(temp,n,arr); 
    } 
    //else return 0; 
} 
int deletemin(int n,int arr[]) 
{ 
       cout<<arr[1]<<"\ndeLeted\n"; 
       arr[1]=arr[n]; 

} 
int insert(int x,int size,int arr[]) 
{ 
    arr[size]=x; 
    int i=(size); 
    do 
    { 
    i=parent(i); 
    if(arr[i]!=min(arr[i],arr[left(i)],arr[right(i)])) 
    heapify(i,(size),arr); 
    else 
    return 0; 
    }while(i!=1); 
} 

int main() 
{ 
    int n,t,arr[100]; 
    cin>>t; 
    while(t--) 
    { 
    cin>>n; 
    for(int i=1;i<=n;i++) 
    cin>>arr[i]; 
    for(int i=n/2;i>=1;i--) 
    { 
       heapify(i,n,arr); 
    } 
    for(int i=1;i<=n;i++) 
    cout<<arr[i]<<" "; 
    deletemin(n,arr); 
    n--; 
    heapify(1,n,arr); 
    for(int i=1;i<=n;i++) 
    cout<<arr[i]<<" "; 
    int y; 
    cout<<"what value do you want to insert\n"; 
    cin>>y; 
    n++; 
    insert(y,n,arr); 
    for(int i=1;i<=n;i++) 
    cout<<arr[i]<<" "; 

    } 

    getch(); 
    return 0; 
} 

` 
+0

歡迎來到Stack Overflow!要求陌生人通過檢查發現代碼中的錯誤並不是富有成效的。您應該通過使用調試器或添加打印語句來識別(或至少隔離)問題,然後回來一個更具體的問題(一旦您將其縮小到10行[測試用例](http ://sscce.org))。 – 2012-07-08 11:02:15

+0

除了Oli說的,請正確格式化您的代碼。特別是,在操作符周圍留出一些空白,並正確縮進代碼。目前,它完全**不可讀。 – 2012-07-08 11:10:12

+0

這個'return((x> y?x:y)> z?(x> y?x:y):z);'不會做函數名所暗示的功能 – mathematician1975 2012-07-08 11:15:33

回答

0

一個簡單的觀察是你的最小功能是錯的!它不返回3個數字的最小值。現在就做ifs吧!

相關問題