首页 > 编程语言 > 详细

堆排序CPP版本

时间:2016-02-25 13:22:02      阅读:208      评论:0      收藏:0      [点我收藏+]
//最小堆模板
template<typenameT>
void MinHeapify(T*arry,int size,int element)//element 元素的索引 size 数组length
{
int lchild=element*2+1,rchild=lchild+1;//左右子树
	while(rchild<size)//子树均在范围内
{
//如果比左右子树都小,完成整理
if(arry[element]<=arry[lchild] && arry[element]<=arry[rchild])
{
return;
}
if(arry[lchild] <= arry[rchild])//如果左边最小
{
swap(arry[element],arry[lchild]);
element=lchild;
}
else
{
swap(arry[element],arry[rchild]);
element=rchild;
}
		lchild=element*2+1;
rchild=lchild+1;
	}
if(lchild < size && arry[lchild] < arry[element])//只有左子树,且子树小于自己
{
swap(arry[lchild],arry[element]);
}
return;
}
//堆排序
template<typenameT>
void HeapSort(T*arry,int size)
{
int i;
for(i=size-1;i>=0;i--)
{
MinHeapify(arry,size,i);
}
while(size>0)
{
swap(arry[size-1],arry[0]);
size--;
MinHeapify(arry,size,0);//整理树
}
return;
}

堆排序CPP版本

原文:http://www.cnblogs.com/Study02/p/5216442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!