主题:达人帮我看下这个堆排序程序,不明白哪错了
#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';
}
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';
}