что-то не так с моей сортировкой кучи

Мне интересно, что не так с моим кодом сортировки кучи?
Я просто сделал то, что обычно: прочитал массив, названный heapify, удалил корень для каждого узла и распечатал его.
но это не сработало.

void heapsort(int *a,int n)
{
for(int i=1;i<=n;i++)
{

cout << "Enter a["<<i<<"] :";
cin >> a[i];
}

system("cls");

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

for(int i=1;i<n;i++)
{
cout << deleteheap(a,n);
}
}void heapify(int i,int *a,int n)
{
int l=2*i,r=2*i+1,largest,temp;
if(l<=n && r<=n)
{

largest=l;
if(a[r]>a[l])
{
largest=r;
}
if(a[i]<largest)
{

temp=a[i];
a[i]=a[largest];
a[largest]=temp;

}

heapify(largest,a,n);

}
}int deleteheap(int *a,int n)
{

int i=0,x=a[1],k=a[n];n--;
for(int j=2 , i=1;j<=n;)
{

if(j<n)
{
if(a[j]<a[j+1])
j++;
}
if(k>=a[j])
break;
a[i]=a[j];
i=j;
j*=2;

}

a[i]=k;
return x;
}

-3

Решение

У меня нет представителя, чтобы комментировать, но я думаю, что ошибка в heapify ():

if(a[i]<largest)
{

должно быть:

if(a[i]<a[largest])
{

Как прокомментировали другие, пожалуйста, объясните более подробно, что не работает, если вы в следующий раз задаете вопрос.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]