堆
// Heap.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <queue>
using namespace std;
int heap[1000];
int heap_size = 0;
void PercDown(int num)
{
int parent, child;
int x = heap[num];
for (parent = num; parent * 2 <= heap_size; parent = child)
{
child = parent * 2;
if (child < heap_size && heap[child] < heap[child + 1])
child++;
if (x >= heap[child])
break;
else
heap[parent] = heap[child];
}
heap[parent] = x;
}
void DeleteMax()
{
heap[1] = heap[heap_size - 1];
heap_size--;
PercDown(1);
}
void insert(int x)
{
heap_size++;
int i;
for (i = heap_size - 1; i > 0; i = i / 2)
if (heap[i / 2] > x)
break;
else
heap[i] = heap[i / 2];
heap[i] = x;
}
/*在堆中已经存放了一组未排序数据,将它们排序,得到堆*/
void BuildHeap()
{
int i;
// 从最后一个数据的父节点开始
for (i = heap_size / 2; i > 0; i--)
{
PercDown(i);
}
}
int main()
{
priority_queue<int, vector<int>, less<int> > q;
for (int i = 0; i < 10; i++)
q.push(i);
for (int i = 0; i < 10; i++)
{
cout << q.top() << " ";
q.pop();
}
/*
heap_size = 10;
for (int i = 1; i < heap_size; i++)
heap[i] = i;
heap[0] = 100;
BuildHeap();
for (int i = 0; i < heap_size; i++)
cout << heap[i] << " ";
cout << endl;
insert(10);
for (int i = 0; i < heap_size; i++)
cout << heap[i] << " ";
cout << endl;
DeleteMax();
for (int i = 0; i < heap_size; i++)
cout << heap[i] << " ";
cout << endl;
DeleteMax();
for (int i = 0; i < heap_size; i++)
cout << heap[i] << " ";
cout << endl;
*/
cin.get();
cin.get();
return 0;
}