#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] ); |
} |
} |