回 帖 发 新 帖 刷新版面

主题:达人帮我看下这个堆排序程序,不明白哪错了

#include<iostream>
using namespace std;

int heapsize=10;

inline int left(int&);

inline int right(int&);

int left(int& i) 
{
    return 2*i;
}
int right(int& i)
{
    return 2*i+1;
}
void  heap_maxify(int num[],int i)
{
    int largest;
    int l=left(i),r=right(i);
    if(num[i-1]<num[l-1]&&l<=heapsize)
        largest=l;
    else 
        largest=i;
    if(num[i-1]<num[r-1]&&r<=heapsize)
        largest=r;
    if(largest!=i)
    {
        int temp;
        temp=num[i-1];
        num[i-1]=num[largest-1];
        num[largest-1]=temp;
        heap_maxify(num,largest);
    }
}
void build_max_heap(int num[])
{
    int i;
    for(i=heapsize/2;i>=1;i--)
        heap_maxify(num,i);
}
void heap_sort(int num[])
{
    int temp;
    build_max_heap(num);
    while(heapsize>1)
    {
        temp=num[heapsize];
        num[heapsize--]=num[0];
        num[0]=temp;
        heap_maxify(num,1);
    }

}

void main()
{
    int i;
    int heapsize;
    int num[10]={12,232,34,22,24,23,3,4,2,28};
    heap_sort(num);
    for(i=0;i<10;i++)
        cout<<num[i]<<'\n';
}

回复列表 (共1个回复)

沙发

请你先用vb写,完了大家帮你看。

我来回复

您尚未登录,请登录后再回复。点此登录或注册