2013-09-24 3 views
1

이것은 힙을 수행하는 세 가지 기능으로 작동하는 프로그램입니다. 어디서 문제인지 파악할 수 없습니다. 누군가 도움이된다면 기꺼이 보내주십시오.디버깅 힙

이 두 가지 기능이있어

int left(int i) 
{return(2*i+1);} 

int right(int i) 
{return(2*i+2);} 

맥스 최대 배열 인덱스 인덱스 좌우 구한다. A는 내가 인덱스

void maxheapify(int i,int *a,int max) 
{ 
if(i>(max-1)/2) 
return; 
else 
{ 
    int big=0,temp=0; 

    if(a[i]<a[left(i)]) 
    big=left(i); 

    if(right(i)<=max && a[i]<a[right(i)]) 
    big=right(i); 

    if(big==i) 
    return; 

    else 
    { 
     temp=a[big]; 
     a[big]=a[i]; 
     a[i]=temp; 
     maxheapify(big,a,max); 
    } 
} 
} 

void buildmaxheap(int *a,int max) 
{ 
int i; 

for(i=0;i<=(max-1)/2;i++) 
maxheapify(i,a,max); 

}  

void heapsort(int *a,int max) 
{ 
    int j=0,temp=0; 

for(j=max;j>0;j--) 
{ 
        buildmaxheap(a,j); 
        temp=a[0]; 
        a[0]=a[j]; 
        a[j]=temp; 
} 
} 
+0

문제가 무엇인지 구체적으로 설명해 주시면 도움을주고 자하는 사람들의 추측이 훨씬 줄어 듭니다. – TopGunCoder

답변

0

난 당신의 코드에 대해 납니까 한 가지가있다 배열 입니다. 당신의 왼쪽 및 오른쪽 조건은 모두 하나씩 바로 만족 될 수 있습니다. 부모에게 권리가 이동하게되었지만 right (i)> = left (i)이라는 보장은 없습니다. 힙이 완료된 후 주문 순서에 문제가 발생할 수 있습니다.