#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
/*
问题:实现一个优先级队列,支持插入元素和返回最小元素操作
分析:优先级队列保证插入和返回最小值元素的时间复杂度都是O(logN),假设有n个元素,每个元素插入在堆中的时间复杂度为O(logN)
所以堆排序的总时间复杂度为O(NlogN)
优先级队列:说白了就是小顶堆的变体。
输入:
输入:
12(数组元素个数)
19 51 26 40 35 22 17 23 29 15 20 12
输出:
12(最小元素)
关键:
1 优先级队列注意使用模板
//优先级队列:包含最大元素个数,支持插入和提起最小元素
template<class T>
class MyPriorityQueue
{
public:
MyPriorityQueue(int maxSize)
{
//需要new出maxSize+1个元素
_maxSize = maxSize;
x = new T[_maxSize + 1];
n = 0;
}
2 优先级队列保证插入和返回最小值元素的时间复杂度都是O(logN),假设有n个元素,每个元素插入在堆中的时间复杂度为O(logN)
所以堆排序的总时间复杂度为O(NlogN)
优先级队列:说白了就是小顶堆的变体。
*/
//优先级队列:包含最大元素个数,支持插入和提起最小元素
template<class T>
class MyPriorityQueue
{
public:
MyPriorityQueue(int maxSize)
{
//需要new出maxSize+1个元素
_maxSize = maxSize;
x = new T[_maxSize + 1];
n &
编程珠玑: 14章 堆 14.2实现一个优先级队列,返回数组中最小值 -------解题总结
最新推荐文章于 2022-03-16 22:42:16 发布
本文介绍了如何用C++实现一个优先级队列,特别是使用小顶堆的数据结构来保证插入和查找最小元素的时间复杂度为O(logN)。文章通过一个模板类`MyPriorityQueue`展示了插入、提取最小元素和检查队列是否为空等基本操作,并提供了完整的代码示例。
摘要由CSDN通过智能技术生成