//http://blog.csdn.net/sunboyiris
#include "stdafx.h"
#include "iostream"
#include "time.h"
using namespace std;
#define MAX 1000
#define SWAP(x,y) {int t;t=x;x=y;y=t;}
void creatminheap(int []);//建立堆
void heapsort(int []);//堆排序
void creatminheap(int num[])
{
int i,s,p;
int heap[MAX+1]={-1};
for(i=1;i<=MAX;i++)
{
heap[i]=num[i];
s=i;
p=i/2;
while((s>=2)&&(heap[p]>heap[s]))
{
SWAP(heap[p],heap[s]);
s=p;
p=s/2;
}
}
for(i=1;i<MAX;i++)
num[i]=heap[i];
}
void heapsort(int num[])
{
int i,j,p,s;
j=MAX;
while(j>1)
{
SWAP(num[1],num[j]);
j--;
p=1;
s=2*p;
while(s<=j)
{
if((s<j)&&(num[s+1]<num[s]))
s++;
if(num[p]<=num[s])
break;
SWAP(num[p],num[s]);
p=s;
s=2*p;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int num[MAX]={0};
int i;
srand(time(NULL));
for(i=0;i<MAX;i++)
{ num[i]=rand()%100;}
creatminheap(num);
heapsort(num);
for(i=MAX-1;i>=0;i--)
{ cout<<num[i]<<" ";}
return 0;
}