堆排序算法

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

posted @ 2013-09-13 10:07  liguigen  阅读(190)  评论(0编辑  收藏  举报