[c]代码库
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX 10
#define SWAP(x,y) {int t;t=x;x=y;y=t;}
void createheap ( int[] );
void heapsort ( int[] );
int main ( void )
{
int number[MAX+1]={-1};
int i,num;
srand ( time ( NULL ) );
printf ( "排序前:" );
for ( i=1; i<=MAX; i++ )
{
number[i]=rand() %100;
printf ( "%d",number[i] );
}
printf ( "\n建立堆积树:" );
createheap ( number );
for ( i=1; i<=MAX; i++ )
printf ( "%d",number[i] );
printf ( "\n" );
heapsort ( number );
printf ( "\n" );
return 0;
}
void createheap ( int number[] )
{
int i,s,p;
int heap[MAX+1]={-1};
for ( i=1; i<=MAX; i++ )
{
heap[i]=number[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++ )
number[i]=heap[i];
}
void heapsort ( int number[] )
{
int i,m,p,s;
m=MAX;
while ( m>1 )
{
SWAP ( number[1],number[m] );
m--;
p=1;
s=2*p;
while ( s<=m )
{
if ( s<m&&number[s+1]<number[s] )
s++;
if ( number[p]<=number[s] )
break;
SWAP ( number[p],number[s] );
p=s;
s=2*p;
}
printf ( "\n排序中:" );
for ( i=MAX; i>0; i-- )
printf ( "%d",number[i] );
}
}
[代码运行效果截图]