您的位置:首页 > 其它

堆排序算法的实现

2012-06-29 15:59 127 查看
最小堆:

#include <string.h>
#include <stdio.h>
void minheap(int a[],int i,int len)
{
int l,r,small,t;
l=2*i;
r=2*i+1;

if(l<=len&&a[i-1]>a[l-1])
{
small=l;
}
else
{
small=i;
}
if(r<=len&&a[small-1]>a[r-1])
{
small=r;
}
if(small!=i)
{
t=a[i-1];
a[i-1]=a[small-1];
a[small-1]=t;
minheap(a,small,len);
}
}
void buildminheap(int a[],int len)
{
int i;
for(i=len/2;i>0;i--)
{
minheap(a,i,len);
}
}
void main()
{
int len,i;
int heap[]={1,2,3,4,5,6,7,8,9,0};
len=sizeof(heap)/sizeof(int);

printf("original:");
for(i=0;i<len;i++)
{
printf("%d",heap[i]);
}
printf("\n");

buildminheap(heap,len);
printf("minheap :");
for(i=0;i<len;i++)
{
printf("%d",heap[i]);
}
printf("\n");

system("pause");
return 0;

}

最大堆:

#include <string.h>
#include <stdio.h>
void maxheap(int a[],int i,int len)
{
int l,r,large,t;
l=2*i;
r=2*i+1;

if(l<=len&&a[i-1]<a[l-1])
{
large=l;
}
else
{
large=i;
}
if(r<=len&&a[large-1]<a[r-1])
{
large=r;
}
if(large!=i)
{
t=a[i-1];
a[i-1]=a[large-1];
a[large-1]=t;
maxheap(a,large,len);
}
}
void buildmaxheap(int a[],int len)
{
int i;
for(i=len/2;i>0;i--)
{
maxheap(a,i,len);
}
}
void main()
{
int len,i;
int heap[]={1,2,3,4,5,6,7,8,9,0};
len=sizeof(heap)/sizeof(int);

printf("original:");
for(i=0;i<len;i++)
{
printf("%d",heap[i]);
}
printf("\n");

buildmaxheap(heap,len);
printf("maxheap :");
for(i=0;i<len;i++)
{
printf("%d",heap[i]);
}
printf("\n");

system("pause");
return 0;

}

插入:

void oneinsertheap(int b[],int in,int len)
{
int i;
if(in<b[0])
{
b[0]=in;
printf("b:");
for(i=0;i<len;i++)
{
printf("%d ",b[i]);
}
printf("\n");
maxheap(b,1,len);
}
else
{
printf("insert value isn't in the top min 10");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: