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