数据结构——C语言实现堆排序(HeapSort)

#include
#define N 100
void HeapAdjust(int a[],int s,int m)//将元素为s为根的子树调整 
{
	int root;
	int i;
	root=a[s];//root暂存根节点
	for(i=2*s;i<=m;i=i*2)
	{
		if(a[i]a[i])
		{
			break;
		}
		else
		{
			a[s]=a[i];
			s=i;
		}
	}
	a[s]=root;
}
void HeapSort(int a[],int n)
{
	int i,j;
	int temp;
	for(i=n/2;i>0;i--)
	{
		HeapAdjust(a,i,n);
	}
	for(i=n;i>0;i--)
	{
		temp=a[1];
		a[1]=a[i];
		a[i]=temp;
		HeapAdjust(a,1,i-1);
	}
	for(i=1;i<=n;i++)
	{
		printf("%d\t",a[i]);
	}
}
int main()
{
	int n,i;
	int a[N];
	printf("请输入要排序的数字个数:\n");
	scanf("%d",&n);
	printf("请顺序输入 %d 个数字:\n",n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	HeapSort(a,n);
 } 

你可能感兴趣的:(排序算法,堆排序,c++,c语言,数据结构,算法,堆排序)