堆的构建和测试

1.堆的构建代码

#include<vector>
 


using namespace std;


template<class T>
class Heap
{
	vector<T> vec;
	int size;
	void BuildHeap(void){
		for(int i=size/2-1;i>=0;i--)
	PercolateDown(i);
	}
	void PercolateDown(int h){
	int p=h;
	int c=2*p+1;
	T temp=vec[p];
	while(c<size)
	{
		if(vec[c]>vec[c+1]&&(c+1)<size)
		c++;
		if(vec[c]<temp)
		{
			vec[p]=vec[c];
			p=c;
			c=2*p+1;
		}else{
			break;
		}
	}
	vec[p]=temp;
	}
	void PercolateUp(){
	int c=size-1;
	int p=(c-1)/2;
	T temp=vec[c];
	while(c>0)
	{
		if(vec[p]>temp)
		{
			vec[c]=vec[p];
			c=p;
			p=(c-1)/2;
	    }else
	    {
		break;
	    }
	
	}
	vec[c]=temp;
	}
public:
	explicit Heap(int max=100):vec(max),size(0){
	}
	explicit Heap(const vector<T>& vt):vec(vt.size()+10),size(vt.size())
	{
	
	for(int i=0;i<size;i++)
	{
		vec[i]=vt[i];
	}
	BuildHeap(); 
	
	}

	bool Empty(void)const{return (size==0);}
	int Size()
	{
		return size;
	} 
	void Insert(const T& item){
		if(size==vec.size()) 
		{
			vec.resize(vec.size()*2);
		}
			vec[size]=item;
	size++;
	PercolateUp();
	}
	const T& Top(void)const
	{
		return vec[0];
	}
	void DeleteMin(void){
		if(size==0)
	{
		cout<<"MInHeap is Empty";
		exit(1);
	}
	size--;
	vec[0]=vec[size];
	PercolateDown(0);
	}
	void DeleteMin(T& item){
			if(size==0)
	{
		cout<<"MInHeap is Empty";
		exit(1);
	}
	item=vec[0];
	size--;
	vec[0]=vec[size];
	PercolateDown(0);
	}
	

};



2.测试程序

#include<iostream>
#include<stdlib.h>
#include<vector>
#include"Heap12.h"
using namespace std;


int main()
{
	vector<int> v;
		int x;
	for(int i=0;i<100;i++)
	{
	x=	rand()%100;
	v.push_back(x);
	
	cout<<x<<"\n";
	}
	
	Heap<int> h(v);
/*		for(int i=0;i<100;i++)
	{
		h.Insert(v[i]);
		 
	}*/
	 
	cout<<h.Size()<<"size\n";
	v.clear();
	while(!h.Empty())
	{
		h.DeleteMin(x);
		cout<<x<<" ";
		v.push_back(x);
	}

	return 0;
} 

3.输出结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值