C++动态数组简单的模拟二元堆
作者:网络转载 发布时间:[ 2015/10/27 10:59:44 ] 推荐标签:测试开发技术 .NET
//C++动态数组简单的模拟二元堆
#include<iostream>
using namespace std;
class BinaryHeap
{
private:
int cap; //该阵列的大容量
int size; //当前元素个数
int* datas; //数组首地址
public:
explicit BinaryHeap(int cap_) :cap(cap_), size(0)
{
datas = new int[cap];
}
~BinaryHeap(){ delete datas; }
void Insert(int);
int DeleteMin();
};
//用数组表示的树,当下标从0?始时,i为当前节点,i*2+1为i的左子树节点,i*2+2为i的右子树节点,i/2为i的父节点
void BinaryHeap::Insert(int data)
{
int i;
for (i = size; i / 2 >= 0 && datas[i / 2] > data; i /= 2) //上滤
{
datas[i] = datas[i / 2];
}
datas[i] = data;
size++;
}
int BinaryHeap::DeleteMin()
{
int i = 0, child = 0;
int lastdata = datas[--size];
int mindata = datas[0];
for (i = 0; i * 2 + 1 <= size-1; i = child) //下滤
{
child = i * 2 + 1;
if (child < size-1 && datas[child + 1] < datas[child])
{
child++;
}
if (lastdata > datas[child])
{
datas[i] = datas[child];
}
else
{
break;
}
}
datas[i] = lastdata;
return mindata;
}
int main()
{
BinaryHeap t(400);
for (int i = 0; i < 100; i++)
t.Insert(i);
for (int i = 200; i > 100; i--)
t.Insert(i);
for (int i = 0; i < 200; i++)
cout << t.DeleteMin() << endl;
cin.get();
return 0;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11