堆排序的应用 Priority queues 优先级排序

堆排序很多时候的实际应用并不如快速排序(quick sort)那么快,但是也有很多实际的应用,例如优先级排序就是其中之一。

优先级排序可以应用到系统的调度算法中,人工智能中也经常要用到,熟悉这个算法很有好处。

不要让名字误导我们,优先级队列其实数据结构不一定就是一个普通的队列数据结构,这里的底层数据结构反而是堆,当然也可以使用其他数据结构实现。

Priority Queues应该是偏重于概念性的数据结构。

下面给出利用堆操作构建优先级排序的基本算法:

#include
#include

#include"heapSort.h"
//包含了堆排序的操作,可以参照我博客的堆排序
using namespace std;

template
T heapMax(const vector& heap)
{
	return heap[0];
}

template
T heapExtractMax(vector& heap)
{
	if(heap.size()<1)	
	{
		cerr<<"Error: heap underflow!"<
void heapIncreaseKey(vector& heap, int i, T key)//i为C下标从0开始
{
	if(i>=heap.size() || i<0) return;
	if(key0 && heapParent(i)
void heapDelete(vector& heap, int i)//i为C下标从0开始
{
	if(i>=heap.size() || i<0) return;
	heap[i] = heap[heap.size()-1];
	heap.pop_back();
	maxHeapify(heap,i,heap.size());
}

template
void heapPrint(const vector& heap)
{
	for(auto x:heap)
	{
		cout< heap(a, a+8);

	//序列输出
	heapPrint(heap);

	//testing operation
	buildMaxHeap(heap, heap.size());

	//建立大顶堆后输出
	heapPrint(heap);

	//最大值测试
	cout<<"Max = "<


总结:

熟悉堆操作的话,这个算法实现没有难度。

reference:

Introduction to Algorithm

你可能感兴趣的:(堆排序的应用 Priority queues 优先级排序)