堆排序算法
#include<stdio.h>
#define LEFT(i) i<<1
#define RIGHT(i) (i<<1)+(1)
#define PARENT(i) i>>1
void swap(int *p,int *q)
{
int tmp=*p;
*p=*q;
*q=tmp;
}
void maxHeapIFY(int *arr,int i,int heap_size)
{
int l=LEFT(i);
int r=RIGHT(i);
int largest;
if(l<=heap_size&&arr[l]>arr[i])
largest=l;
else
largest=i;
if(r<=heap_size&&arr[r]>arr[largest])
largest=r;
if(largest!=i)
{
swap(&arr[i],&arr[largest]);
maxHeapIFY(arr,largest,heap_size);
}
}
int main()
{
int arr[]={0,12,23,1,24,122,8,22};
int len=sizeof(arr)/sizeof(arr[0]);
int length=len-1;
int heap_size=length;
int i=length>>1;
for(;i>=1;i--)
{
maxHeapIFY(arr,i,heap_size);
}
int j=length;
for(;j>=2;j--)
{
swap(&arr[1],&arr[j]);
heap_size=heap_size-1;
maxHeapIFY(arr,1,heap_size);
}
int k=1;
for(;k<=length;k++)
{
printf("%d ",arr[k]);
}
system("pause");
return 0;
}