2012-07-08 71 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吧!

相关问题