我想知道我的堆排序代码有什么问题? 我只是做了一些常见的事情;读取一个名为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;
}
答案 0 :(得分:0)
我没有代表评论,但我认为错误在于heapify():
if(a[i]<largest)
{
应该是:
if(a[i]<a[largest])
{
正如其他人所评论的那样,请在下次提出问题时更详细地解释一下根据您不起作用的内容。