用c ++构建MIN-Heap

时间:2016-03-01 14:09:52

标签: c++ heapsort

我试图通过反转代码中的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;
      } 

0 个答案:

没有答案