c++模板类实现算法堆排序

假设为升序, 构建大堆


每次交换第一个和最后一个元素, 使最大元素沉底, 再对剩下元素进行建大堆


.h:

#include <vector>								//利用vector容器实现堆

template<class T>
class HeapSort
{
public:
	HeapSort( )									//默认构造函数
	{}

	HeapSort( T* a, size_t n )					//构建堆			//假设需要升排列 ,我们构建大堆,  每次将最大的元素与最后一个元素交换后, 最大的就在后面, 将这个元素,最大元素忽视(假设数组里已经没有这个元素)再建堆, 重复之前操作, 完成升序 
	{
		_a.reserve( n );

		for ( size_t i = 0; i < n; ++i )		//先构建一颗树
		{
			_a.push_back( a[i] );
		}

		AdjustDown( _a.size( ) );				//用向下调整算法构建大堆
		Sort( );								//排序
		//for ( size_t k = _a.size( ); k > 2;  --k )//只有一个元素时就不需要排序了
		//{
		//	swap( _a[0], _a[k - 1] );

		//	for ( int y = (k - 3) / 2; y >= 0; --y )//此时当堆里面只有 k-1 个元素
		//	{
		//		AdjustDown( y, k - 1 );			//必须自己传此时堆元素个数, 不能用_a.size( )否则程序会出错
		//	}
		//}

		//if ( _a[0] < _a[1] )
		//{
		//	swap( _a[
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值