2013-09-24 3 views
1

это моя программа, которая работает с тремя функциями для выполнения heapsort. Мне не удалось выяснить, в чем проблема. Буду рад, если кто-нибудь поможет.Отладка heapsort

эти две функции вычисления слева и справа от индекса

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

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

макс здесь максимальна индекс массива. а является массив я это индекс

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

Существует одна вещь, которую я заметил о вашем коде. Ваши левые и правые условия могут быть удовлетворены один за другим. В результате правое перемещение к родительскому объекту, но нет гарантии, что справа (i)> = left (i). Я чувствую, что это может вызвать некоторые проблемы с упорядочением после того, как куча закончилась.

Смежные вопросы