C++ 我的堆排序有问题吗

C++ 我的堆排序有问题吗,c++,heapsort,C++,Heapsort,我想知道我的堆排序代码怎么了? 我只是做了平常的事;读取一个名为heapify的数组,删除每个节点的根并打印它。 但它不起作用 void heapsort(int *a,int n) { for(int i=1;i<=n;i++) { cout << "Enter a["<<i<<"] :"; cin >> a[i]; } system("cls"); for(in

我想知道我的堆排序代码怎么了? 我只是做了平常的事;读取一个名为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;
 }

我没有代表对此发表评论,但我认为错误在于heapify:

if(a[i]<largest)
{
应该是:

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

正如其他人所评论的那样,请在下次提问时根据您的意见更详细地解释什么不起作用。

但它不起作用。请具体一点。首先,我认为heapify function编译时应该有问题,包含所有警告和调试信息,例如g++-Wall-g,并使用调试器,例如gdb…我的意思是在这里ifl@dark-天空:你说它不起作用是什么意思?它是否产生了意外/不正确的结果,或者根本没有产生任何结果?请说明问题的确切形式。