Heapsort-nlogn的稳定排序

#include "stdio.h"
#include "stdlib.h"
int a[32768]={},length;
void swap(int *x,int *y)
{
    int temp;
    temp=*x;
    *x=*y;
    *y=temp;//交换函数
}

int left(int i)
{return 2*i;}
int right(int i)
{return 2*i+1;}
void heapify(int i)//算法的核心,堆序调整!!!
{
int l,r,max=0;
l=left(i);
r=right(i);
if(l<=length&&a[l]>a[i])max=l;
else max=i;
if(r<=length&&a[max]<a[r])max=r;
if(max!=i)
{swap(&a[i],&a[max]);
heapify(max);}
}
void build()
{
    int i;//建堆,就是初始化过程,
    for(i=length/2;i>=1;i--)heapify(i);
}
int main()
{
    int j,n;
    length=32767;
    n=length;
    for(j=1;j<=length;j++)a[j]=-j;
    build();
    for(j=length;j>=2;j--)
    {swap(&a[1],&a[j]);length--;heapify(1);}//主程序的调用部分
    return 0;
}
////////这个的效率很高,但是编写的时间很长,不到万不得已不能使用!!!!!!!!1
posted @ 2008-10-31 11:20  SЁv⑦ēЙ  阅读(189)  评论(0)    收藏  举报