码迷,mamicode.com
首页 > 编程语言 > 详细

排序——堆排序

时间:2016-04-14 14:02:21      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

  以下是自己写的堆排序源码,已经测试通过,以后有时间总结,

#include<stdio.h>
//堆a,存储在数组a[len]中,根节点下标为i,len为数组长度 
//该函数的作用是保持最大堆的性质 
void Keep(int *a,int len,int i);
void Build(int* a,int len);
void Sort(int* a,int len);
void Keep(int *a,int len,int i)
{
	int left=2*i+1;
	int right=2*i+2;
	int largest=i,temp;
	if(left<len&&a[left]>a[i])
		largest=left;
	if(right<len&&a[right]>a[largest])
		largest=right;
	if(largest!=i)
		{
			temp=a[i];
			a[i]=a[largest];
			a[largest]=temp;
			Keep(a,len,largest);
	}
} 
//建堆:通过一个数组建立最大堆
void Build(int* a,int len)
{
	int i;
	for(i=len/2-1;i>=0;i--)
		Keep(a,len,i);
}
//堆排序
void Sort(int* a,int len)
{
	int temp,i;
	Build(a,len);
	for(i=len-1;i>=1;i--)
	{
		temp=a[i];
		a[i]=a[0];
		a[0]=temp;
		printf("%d %d\t",a[0],a[i]);
		len--;
		Keep(a,len,0);	
			
			
	}	
	printf("\n");
}
int main()
{
	int len=10;
	int a[len];
	for(int i=0;i<len;i++)
		scanf("%d",&a[i]);
	Build(a,len);
	Sort(a,len);
	for(int i=0;i<len;i++)
		printf("%d ",a[i]);
	
	
	
return 0;	
}

  

排序——堆排序

标签:

原文地址:http://www.cnblogs.com/YTYMblog/p/5390760.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!