C++ 堆排序,我可以';我想不出是什么';我的代码有问题,它没有';输出正确顺序 #包括 使用名称空间std; 智力治疗; void maxHeapify(int a[],int n,int i) { int l=2*i+1; int r=2*i+2; int=i; 如果(la[i])最大=l; 如果(ra[i])最大=r; 如果(最大!=i) { 掉期(a[i],a[最大]); maxHeapify(a,n,最大); } } 无效堆口(int a[],int n) { heapSize=n; 对于(inti=n/2;i>=0;i--)maxHeapify(a,n,i); 对于(int i=n-1;i>=1;i--) { 掉期(a[0],a[i]); 医治--; maxHeapify(a,n,0); } } int main() { int a[]={1,2,3,7,9,15,13,11}; heapSort(a,8); 对于(inti=0;i

C++ 堆排序,我可以';我想不出是什么';我的代码有问题,它没有';输出正确顺序 #包括 使用名称空间std; 智力治疗; void maxHeapify(int a[],int n,int i) { int l=2*i+1; int r=2*i+2; int=i; 如果(la[i])最大=l; 如果(ra[i])最大=r; 如果(最大!=i) { 掉期(a[i],a[最大]); maxHeapify(a,n,最大); } } 无效堆口(int a[],int n) { heapSize=n; 对于(inti=n/2;i>=0;i--)maxHeapify(a,n,i); 对于(int i=n-1;i>=1;i--) { 掉期(a[0],a[i]); 医治--; maxHeapify(a,n,0); } } int main() { int a[]={1,2,3,7,9,15,13,11}; heapSort(a,8); 对于(inti=0;i,c++,heapsort,C++,Heapsort,,在maxHeapify函数中,您没有将堆的右子级与当前最大的子级进行比较。您的函数将是 #include<iostream> using namespace std; int heapSize; void maxHeapify(int a[],int n,int i) { int l=2*i+1; int r=2*i+2; int largest=i; if(l<heapSize&&a[l]>a[i]) largest=l

,在maxHeapify函数中,您没有将堆的右子级与当前最大的子级进行比较。您的函数将是

#include<iostream>
using namespace std;
int heapSize;
void maxHeapify(int a[],int n,int i)
{
    int l=2*i+1;
    int r=2*i+2;
    int largest=i;
    if(l<heapSize&&a[l]>a[i]) largest=l;
    if(r<heapSize&&a[r]>a[i]) largest=r;
    if(largest!=i)
    {
        swap(a[i],a[largest]);
        maxHeapify(a,n,largest);
    }
}
void heapSort(int a[],int n)
{
    heapSize=n;
    for(int i=n/2;i>=0;i--)maxHeapify(a,n,i);
    for(int i=n-1;i>=1;i--)
    {
        swap(a[0],a[i]);
        heapSize--;
        maxHeapify(a,n,0);
    }
}
int main()
{
    int a[]={1,2,3,7,9,15,13,11};
    heapSort(a,8);
    for(int i=0;i<8;i++)cout<<a[i]<<" ";
    return 0;
}
void maxHeapify(int a[],int n,int i){
int l=2*i+1;
int r=2*i+2;
int=i;
如果(la[i])最大=l;
如果(ra[max])max=r;
如果(最大!=i)
{
掉期(a[i],a[最大]);
maxHeapify(a,n,最大);
}
}
void maxHeapify(int a[], int n, int i) {
    int l = 2 * i + 1;
    int r = 2 * i + 2;
    int largest = i;
    if(l < heapSize && a[l] > a[i]) largest = l;
    if(r < heapSize && a[r] > a[largest]) largest = r;
    if(largest! = i)
    {
        swap(a[i], a[largest]);
        maxHeapify(a, n, largest);
    }
}