#include<stdio.h>
#include<stdlib.h>
void BUILD_MAX_HEAP(int A[],int length)
{
int heapsize;
int i;
heapsize = length;
for(i = (int)(heapsize/2);i>=0;i--)
MAX_HEAPIFY(A,i,heapsize);
}
void MAX_HEAPIFY(int A[],int i,int heapsize)
{
int temp,L,R;
int largest;
L = i*2;
R = i*2+1;
if(L < heapsize && A[L] > A[i])
largest = L;
else
largest = i;
if(R < heapsize && A[R] > A[i])
largest = R;
if(largest != i)
{
temp = A[i];
A[i] = A[largest];
A[largest] = temp;
MAX_HEAPIFY(A,largest,heapsize);
}
}
void HEAPSORT(int A[],int heapsize)
{
int temp;
int i;
BUILD_MAX_HEAP(A,heapsize);
for(i = heapsize ; i >=1;i--)
{
temp = A[i];
A[i] = A[0];
A[0] = temp;
heapsize -=1;
MAX_HEAPIFY(A,0,heapsize);
}
}
int main(void)
{
int i,size;
int A[9];
scanf("%d",&size);
for(i=0;i<size;i++)
scanf("%d",&A[i]);
HEAPSORT(A,size-1);
for(i=0;i<size;i++)
printf("%d ",A[i]);
return 0;
}
《算法导论》的堆排序
最新推荐文章于 2025-06-15 17:58:09 发布