2016-09-10 7 views
-2

私はちょうど最大ヒープの最初の反復のように見えるテストコードを書いた。しかし、実行時にエラーが発生します。 2番目の条件が狂っている場合。それは実行されることは想定されていませんが、何とかそれはしません。コードが狂っている

期待O/P:8 5 3 7 2
現在のO/P:3 8 5 7 2

#include <stdio.h> 

int a[]={5,8,3,7,2}; 

void printArray() 
{ 
    printf("\nStatus of the array\n"); 
    for(int i=0;i<5;i++) 
     printf("[%d]",a[i]); 
    printf("\n"); 
} 

void swap(int x,int y) 
{ 
// printf("%d %d",a[x],a[y]); 
    a[x]=a[x]+a[y]; 
    a[y]=a[x]-a[y]; 
    a[x]=a[x]-a[y]; 
} 

void maxHeap(int i) 
{ 
    int largest=i,right=0,left=0; 

    left=(2*i)+1; 
    right=(2*i)+2; 

    if(a[left] > a[i]) 
     largest=left; 

    printf("L=%d R=%d",left,right); 

    if(a[right] > a[i]); 
    { 
     printf("\na[right]=%d a[i]=%d",a[right],a[i]); 
     largest=right; 
    } 
    if(largest != i) 
     swap(largest,i); 
} 

void main() 
{ 
    printArray(); 
    maxHeap(0); 
    printArray(); 
} 

答えて

1
if(a[right] > a[i]); <--- oops remove this semicolon 
{ 
    printf("\na[right]=%d a[i]=%d",a[right],a[i]); 
    largest=right; 
} 
関連する問題