最大堆实现优先队列

最大堆实现优先队列

头文件

#include "heap_sort.h"
#include "stdexcept"
#include <iostream>
class MaxHeapPriorityQueue {
public:int heap_size;
private:int capacity;int *array;void increase_key(int key,int index);
public:void insert(int key);int maximum();int extract_max();void heap_delete(int index);const int* get_array();MaxHeapPriorityQueue(int capacity = 50);MaxHeapPriorityQueue(const int *array,const int length);virtual ~MaxHeapPriorityQueue();
};

cpp文件

#include "MaxHeapPriorityQueue.h"
MaxHeapPriorityQueue::MaxHeapPriorityQueue(int capacity):capacity(capacity)
{array = new int [capacity];heap_size = 0;
}
MaxHeapPriorityQueue::MaxHeapPriorityQueue(const int *array,const int length)
{capacity = length;this->array = new int [capacity];heap_size = capacity;for (int i = 0; i < heap_size; ++i) {this->array[i] = array[i];}build_heap(this->array,heap_size);
}
void MaxHeapPriorityQueue::increase_key(int key,int index){if(index >= heap_size || key < array[index]){perror("new key error");return;}array[index] = key;while (index>0 && array[parent(index)] < key){array[index] = array[parent(index)];array[parent(index)] = key;index = parent(index);}}
void MaxHeapPriorityQueue::insert(int key){heap_size ++;if(heap_size>capacity){int *temp_array = new int [capacity*2];for (int i = 0; i < heap_size; ++i) {temp_array[i] = array[i];}delete[] array;array = temp_array;capacity *= 2;}array[heap_size - 1] = INT_MIN;increase_key(key,heap_size-1);}
int MaxHeapPriorityQueue::maximum(){return array[0];
}
int MaxHeapPriorityQueue::extract_max(){int max = array[0];array[0] = array[heap_size-1];heap_size --;max_heapify(array,heap_size,0);return max;
}void MaxHeapPriorityQueue::heap_delete(int index){if(index>=heap_size || index < 0 || heap_size<=0){perror("index overflow");return;}if(array[index] > array[heap_size-1]){array[index] = array[heap_size-1];max_heapify(array,heap_size-1,index);}else{increase_key(array[heap_size-1],index);}heap_size --;
}
const int* MaxHeapPriorityQueue::get_array(){return  array;
}
MaxHeapPriorityQueue::~MaxHeapPriorityQueue()
{if(array!= nullptr)delete [] array;
}

内置的堆排序代码链接:堆排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试官:你说你喜欢研究新技术,那么请说说你对 Blazor 的了解

阅读本文大概需要 1.5 分钟。最近在几个微信 .NET 交流群里大家讨论比较频繁的话题就是这几天自己的面试经历。面试官&#xff1a;“你刚说你喜欢研究新技术&#xff0c;那么你对 Blazor 了解多少&#xff1f;”作为一位专注于 .NET 开发的软件工程师&#xff0c;你好意思说你对…

Java变量

变量 ​ 变量是程序的基本组成单位 变量的介绍 概念 变量相当于内存中一个数据存储空间的表示&#xff0c;你可以把变量看做是一个房间的门牌号&#xff0c;通过门牌号我们可以找到房间&#xff0c;而通过变量名可以访问到变量(值)。 01&#xff1a; class Test {public s…

将k个有序链表合并成一个有序链表

将k个有序链表合并成一个有序链表 这里以从小到大排序为例&#xff0c; 时间复杂度为O&#xff08;nlgk&#xff09;。 特点&#xff1a;利用最小堆来完成k路归并 思路&#xff1a;取每个列表中的第一个元素&#xff0c;并将其放在最小堆中。与每个元素一起&#xff0c;必须跟…

[Student.Achieve] 学生教务管理系统开源

&#xff08;源自&#xff1a;https://neters.club&#xff09;一觉醒来Github改版了&#xff0c;我个人还是挺喜欢的????。还有两个月就是老张做开源两周年了&#xff0c;时间真快&#xff0c;也慢慢的贡献了很多的开源作品&#xff0c;上边的是主要的七个作品&#xff0c…

d叉堆实现优先队列

d叉堆实现优先队列 时间复杂度 dlog&#xff08;d,n) #include <stdexcept> #include <iostream> class DForkHeapPriorityQueue { private:int capacity;int *array;int d;int heap_size; public:DForkHeapPriorityQueue(int capacity,int d);DForkHeapPriority…

.NET Core HttpClient源码探究

前言在之前的文章我们介绍过HttpClient相关的服务发现&#xff0c;确实HttpClient是目前.NET Core进行Http网络编程的的主要手段。在之前的介绍中也看到了&#xff0c;我们使用了一个很重要的抽象HttpMessageHandler&#xff0c;接下来我们就探究一下HttpClient源码&#xff0c…

Young氏矩阵

Young氏矩阵 利用堆思想实现Young氏矩阵 #include <iostream> class YoungTableau {private:int *array;int row;int column;int heap_size; public:YoungTableau

Java 多线程:线程优先级

1 优先级取值范围 Java 线程优先级使用 1 ~ 10 的整数表示&#xff1a; 最低优先级 1&#xff1a;Thread.MIN_PRIORITY 最高优先级 10&#xff1a;Thread.MAX_PRIORITY 普通优先级 5&#xff1a;Thread.NORM_PRIORITY 2 获取线程优先级 public static void main(String[]…

《Unit Testing》1.1 -1.2 单元测试的目的

本系列是《Unit Testing》 一书的读书笔记 精华提取。书中的例子 C# 语言编写&#xff0c;但概念是通用的&#xff0c;只要懂得面向对象编程就可以。 单元测试当前的状态目前&#xff0c;在&#xff08;美国的&#xff09;大部分公司里&#xff0c;单元测试都是强制性的。生产…

算法-排序-快速排序(包含多种快速排序)

快速排序 特点&#xff1a;原址排序&#xff0c;最坏的时间复杂度O&#xff08;n^2) 平均时间复杂度O&#xff08;nlgn&#xff09; 比归并排序系数常数项小 不稳定 底部有最坏时间复杂度为Ω(nlgn)的快速排序地址 void quick_sort(int *array,int start,int end); int parti…

Java Exception

Exception 异常捕获 将代码块选中->ctrlaltt->选中try-catch 01: public class Exception01 {public static void main(String[] args) {int n1 10;int n2 0;try {int res n1/n2;} catch (Exception e) { // e.printStackTrace();System.out.println(e.…

《Unit Testing》1.3 使用覆盖率指标来度量测试套件的好坏

使用覆盖率来度量测试套件&#xff08;Test Suite&#xff09;的质量有两种比较流行的测试覆盖率的度量方法&#xff1a;代码覆盖率分支覆盖率覆盖率度量会显示一个测试套件&#xff08;Test Suite&#xff09;会执行多少代码&#xff0c;范围从 0 至 100%。除了上述两种方法之…

对区间的模糊排序

对区间的模糊排序 算法导论第三版第二部分7-6题 Interval find_intersection(vector<Interval> &array,int start,int end) {int random random_include_left_right(start,end);Interval key array[end];array[end] array[random];array[random] key;key arra…

Linux创始人:v5.8是有史以来最大的发行版之一

导语Linux v5.8已经修改了所有文件的20&#xff05;&#xff0c;是迄今为止变化最大的一次发行版。正文Linux创始人Linus Torvalds表示&#xff1a;Linux内核5.8版是“我们有史以来最大的发行版之一”。如果一切顺利&#xff0c;Linux v5.8稳定版应该在2020年8月的某个时候出现…

算法-排序-计数排序(包含对非负数和整数的排序)

计数排序 时间复杂度O&#xff08;n&#xff09; 特点&#xff1a;稳定 限制&#xff1a;对0到maximum中的数进行排序 maximum要求&#xff0c;比数组中最大值大或者相等 有拓展版本的计数排序&#xff08;在文章基数排序内&#xff09; 基数排序链接 void counting_sort(int…

[高等数学]这你不背?

求导及求微分的基本公式: 泰勒中值定理: 麦克劳林公式: 不定积分公式: 凑微分: 第二类换元积分法常用的三种情况: 求高阶导数的几个公式: 二阶常系数非齐次线性微分方程的特解: 排列组合公式: C的计算&#xff1a; 下标的数字乘以上标的数字的个数,且每个数字都要-1.再除以上标…

怎么开会才不浪费时间?

这里是Z哥的个人公众号每周五11&#xff1a;45 按时送达当然了&#xff0c;也会时不时加个餐&#xff5e;我的第「148」篇原创敬上大家好&#xff0c;我是Z哥&#xff0c;先祝大家端午节日快乐。节日期间就发篇比较短的文章吧。人在职场混&#xff0c;开会应该是本职工作之外花…

在O(1)的时间内计算n个整数落在区间[a,b]的个数(预处理时间为O(n+k))

在O&#xff08;1&#xff09;的时间内计算n个整数落在区间[a,b]的个数 预处理时间为O&#xff08;nk) 算法导论第三版8.2-4题 int find_inverter_count(int *array,int length,int maximum,int inverter_left,int inverter_right) {if(inverter_left<0 || inverter_right…

汇编语言中常见的标志位: CF, PF, AF, ZF, SF,TF,IF,DF, OF

一、运算结构标志位 1.CF(进位标志位)&#xff1a;主要用来反映运算是否产生进位或借位&#xff0c;产生进位或借位则CF1&#xff0c;否则CF0。 2.PF(奇偶标志位)&#xff1a;用于反映运算结果中“1”的个数的奇偶性&#xff0c;如果“1”的个数为偶数&#xff0c;则PF1&…