我试图通过反转代码中的max_heapify的性能来实现min-heap但是我在执行期间遇到了分段错误(核心转储)。我知道代码在哪里访问它没有的内存有权访问。这段代码有什么问题?
#include <iostream>
using namespace std;
void min_heapify(int a[], int i, int n)
{
int l,r,smallest,loc;
l=(2*i);
r=(2*i+1);
if((l<=n) && (a[l]>a[i]))
smallest=i;
else
smallest=l;
if((r<=n) && (a[smallest]>a[r]))
smallest=r;
if(smallest != i)
{
loc=a[i];
a[i]=a[smallest];
a[smallest]=loc;
min_heapify(a,smallest,n);
}
}
void build_min_heap(int a[], int n)
{
for(int k=n/2;k>=1;k--)
{
min_heapify(a,k,n);
}
}
void heapsort(int a[], int n)
{
build_min_heap(a,n);
int temp,i;
for(i=n;i>=2;i--)
{
temp=a[i];
a[i]=a[1];
a[1]=temp;
min_heapify(a,1,i-1);
}
}
main()
{
cout<<"Enter the number of elements\n";
int n;
cin>>n;
cout<<"Enter the numbers\n";
int a[n];
for(int i=1;i<=n;i++)
cin>>a[i];
heapsort(a,n);
cout<<"::::::::::::::::The Sorted List Is::::::::::::::\n";
for(int i=1;i<=n;i++)
cout<<a[i]<<endl;
return 0;
}