每天一个小算法(Heapsort)

#include "stdio.h"
#include "stdlib.h"

#define Num 10

Heap(int arr[],int i,int n)                   //堆化操作,最大堆
{
	int ileft = 2*i+1;
	int iright = ileft+1;
	int h,temp;

	temp = arr[i];

	while(ileft < n)
	{

		if(iright < n && arr[ileft] < arr[iright]) //要用ileft和iright作为限制的条件,组合用能避免最末数的麻烦
		{
			h = iright;
		}
		else 
		{
			h = ileft;
		}

		if(temp > arr[h])
		{
			break;
		}

		arr[i] = arr[h];
		i=h;
		ileft=2*i+1;
		iright=ileft+1;
		}

		arr[i] = temp;
}

main()
{	
	int arr[Num]={21,32,3,42,634,13,8,234,12,10};
	int i,k,temp;

	for(k = Num;k > 1;k--)				//数组中用到的个数越来越少
	{
		for(i = k/2-1;i >= 0;i--)
		{
			Heap(arr,i,k);
		}

		temp = arr[k-1];			//最上面和最后一个交换,实质为删除操作
		arr[k-1] = arr[0];
		arr[0] = temp;
	}

	for(i=0;i<Num;i++)
	{
		printf("%d\n",arr[i]);
	}
}




今天自己编了一个,比较啰嗦,膜拜一下前面连接中作者。
posted @ 2014-10-16 00:46  司空格子Ored  阅读(171)  评论(0编辑  收藏  举报