有问题的最大堆

刚看算法导论,写代码,测试居然是错的。。。,早上没时间了,马上去上班,写贴这里,回头细看:

int GetParentIndex(int i)
{
	return (i+1)/2-1;
}
int GetLeftChild(int i)
{
	return 2*i+1;
}
int GetRightChild(int i)
{
	return 2*(i+1);
}
void MaxHeapfy(int* aArr,int aIndex,int aHeapSize)
{
	int lMaxIndex = aIndex;
	if (GetLeftChild(aIndex) < aHeapSize && aArr[GetLeftChild(aIndex)] > aArr[aIndex])
	{
		lMaxIndex = GetLeftChild(aIndex);
	}
	if (GetRightChild(aIndex) < aHeapSize && aArr[GetRightChild(aIndex)] > aArr[lMaxIndex])
	{
		lMaxIndex = GetRightChild(aIndex);
	}
	if (lMaxIndex != aIndex)
	{
		int lTemp = aArr[lMaxIndex];
		aArr[lMaxIndex] = aArr[aIndex];
		aArr[aIndex] = lTemp;

		MaxHeapfy(aArr,lMaxIndex,aHeapSize);
	}
}
void BuildMaxHeap(int* aArr, int aSize)
{
	for (int i = (aSize)/2-1; i >= 0; --i)
	{
		MaxHeapfy(aArr,i,aSize);
	}
}
void HeapSort(int* aArr, int aSize)
{
	BuildMaxHeap(aArr,aSize);
	int lHeapSize = aSize;
	for (int i = (aSize)/2-1; i >= 0; --i)
	{
		int lTemp = aArr[i];
		aArr[i] = aArr[0];
		aArr[0] = lTemp;

		--lHeapSize;

		MaxHeapfy(aArr,i,lHeapSize);
	}
}
int main()
{
	int lArr[] = {1,-10,26,8,-90};
	int lSize = sizeof(lArr)/sizeof(int);
	HeapSort(lArr,lSize);
	for (int i = 0; i < lSize; ++i)
	{
		cout << lArr[i] << endl;
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值