高级数据结构---优先队列

高级数据结构—优先队列

原理:参考趣学数据结构

代码:

#include <stdio.h>
#include <stdlib.h>
int r[] = { -1,1,4,590,4,2,8,7,5,89,67,5,2,1,67,86,54 };//存储要排序的数,第一个元素不存储元素赋值为-1
int length = sizeof(r) / sizeof(int);//待排序的数的个数
void swap(int i, int j) {//交换二个变量的值int temp = r[i];r[i] = r[j];r[j] = temp;
}
void sink(int k, int n, int flag) {//flag=0表示最大堆,否则最小堆,实现最大(小)堆,即所有根节点的值大于等于(小于等于)该根节点下的左右节点int j = 0;while (2 * k <= n) {//从倒数第二层有左孩子的结点开始往上检查是否满足每个子树是否满足最大(小)堆的条件j = 2 * k;if (flag == 0) {//最大堆的更新条件if (j<n&&r[j + 1]>r[j])j++;//找到当前根节点下最大的值if (r[k] < r[j])swap(k, j);else//该根节点下已经满足最大堆的条件则退出检查break;}else if (flag == 1) {//最小堆的更新条件if (j < n&&r[j + 1] < r[j])j++;//找到当前根节点下最小的值if (r[k] > r[j])swap(k, j);else//该根节点下已经满足最小堆的条件则退出检查break;}k = j;//更新了当前根结点的值则继续向下检查是否满足最大(小)堆的条件}
}
void pop(int n) {//出队printf("%d ", r[1]);r[1] = r[n--];sink(1, n, 0);//大顶堆
}
void swim(int k) {//上浮while (k > 1 && r[k] > r[k / 2]) {swap(k, k / 2);k /= 2;}
}
void push(int x, int n) {//入队r[++n] = x;swim(n);
}
void heapSort(int n, int flag) {//最大堆或最小堆排序,flag=0表示最大堆排序,否则最小堆排序,这里的最小堆因为没有开辟新的空间所以是逆序的,而最大堆的排序结果是升序的//初始化堆for (int i = n / 2; i > 0; i--) {sink(i, n, flag);}
}
int main() {heapSort(length - 1, 0);//初始化大顶堆int i = 0,n=length-1;while (i < 3) {int v;scanf("%d", &v);push(v,n);n++;i++;}printf("出队:\n");while (n >= 1) {pop(n);n--;}printf("\n");system("pause");return 0;
}

测试截图:

请添加图片描述

时间复杂度O(logn),空间复杂度O(1)

如果存在什么问题,欢迎批评指正!谢谢!

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

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

相关文章

[蓝桥杯2017初赛]贪吃蛇长度-模拟(水题)

题目描述 小明在爷爷的私人收藏馆里找到一台老式电脑。居然没有图形界面&#xff0c;只能用控制台编程。 经过小明的一阵摸索&#xff0c;神奇地设计出了控制台上的贪食蛇游戏。 如下图&#xff0c;是游戏时画面截图。 其中&#xff0c;H表示蛇头&#xff0c;T表示蛇尾。#表示…

蓝屏(BSOD)转储设置,看本文就够了!

前言 我们在内核转储&#xff0c;开抓啦&#xff01;这篇文章里介绍了一个关键的系统设置。设置好后可以让系统在蓝屏&#xff08;Blue Screen of Death&#xff0c;简称 BSOD&#xff09;的时候自动保存转储文件。当时只是简单的介绍了设置步骤&#xff0c;本文力求详细的介绍…

算法---字符串顺序平移

算法—字符串顺序平移 原理&#xff1a;矩阵的转置思想 代码&#xff1a; #include <stdio.h> #include <stdlib.h> void swap(char *a,int i, int j) {//交换二个变量的值char temp a[i];a[i] a[j];a[j] temp; } void invert(char *a,int s, int e) {//对称…

delphi中的函数传参如何传枚举参数_Python基础笔记Day05函数

Python函数 function函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。函数能提高应用的模块性&#xff0c;和代码的重复利用率。Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c;这被…

[蓝桥杯2018初赛]日志统计-双指针

代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std; typedef pair<int, int>PII; #define x first #define y second const int N 100010; bool st[N]; int n, d, k; PII a[N]; int cnt[N];int main() {cin >> n …

不要错过这轮疫情的“洗牌”机会

大家好&#xff0c;我是Z哥。今天和大家随便聊聊天。这次的疫情对我们所有人影响都很大&#xff0c;除了让你心怀忐忑的过了个春节之外&#xff0c;呆在家的时间对很多人来说也是格外的长。这样的突发事件&#xff0c;除了能看出不同公司之间应对突发状况的能力差异之外&#x…

算法---查找倒数第k个链表的值

算法—查找倒数第k个链表的值 代码&#xff1a; link.h #pragma once #define elemType int #include<stdlib.h> typedef struct link {elemType data;struct link * next; }link; bool initLink(link* &Link) {//初始化链表Link (link*)malloc(sizeof(link));Li…

mysql boolean_产品操作MySQL第7篇 – 运算符 – IS NULL

本资料为产品岗位作为日常工作参考&#xff0c;语言口语化At 2019/4/27 By David.Yang介绍什么是IS NULL IS NULL作为一种运算符&#xff0c;用来对数据表中的NULL值数据进行过滤。语法target IS NULLtarget值为NULL&#xff0c;则表达式返回TRUE&#xff0c;否则返回FALSE。MY…

微软开源Scalar,提升操作巨型Git仓库的速度

Git 属于分布式版本控制系统&#xff0c;默认情况下&#xff0c;每个 Git 仓库都具有整个历史记录的完整文件副本。即便是中等规模的开发团队也会产生数千个提交&#xff0c;每个月向仓库添加几百兆的数据。而随着仓库的占用空间增加&#xff0c;Git 难以管理所有数据&#xff…

word List 41

word List41 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

b树与b+树的区别_面试必考:B树、B树、B+树、B*树图文详解

B树B树又叫做二叉搜索树&#xff0c;倒状的树形结构。如下图所示特点&#xff1a;所有的非子夜节点最多拥有两个子节点树(左子树和右子树)。所有结点存储一个关键字。节点的左右儿子&#xff0c;左边是比该节点小的&#xff0c;右边是比该节点大的。缺点&#xff1a;因为二叉搜…

[蓝桥杯2016初赛]煤球数目-找规律

题目描述 有一堆煤球&#xff0c;堆成三角棱锥形。具体&#xff1a; 第一层放1个&#xff0c; 第二层3个&#xff08;排列成三角形&#xff09;&#xff0c; 第三层6个&#xff08;排列成三角形&#xff09;&#xff0c; 第四层10个&#xff08;排列成三角形&#xff09;&…

.NET Core开发实战(第6课:作用域与对象释放行为)--学习笔记(上)

06 | 作用域与对象释放行为作用域主要由 IServiceScope 这个接口来承载对于实现 IDisposable 类的实例的对象&#xff0c;容器会负责对其生命周期进行管理&#xff0c;使用完毕之后&#xff0c;他会释放这些对象实现 IDisposable 接口类型的释放&#xff1a;1、容器只会负责由其…

word List 42

word List 42 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

利用AppMetrics对Web进行监控教程

一、基础准备1. 安装依赖这里可以通过nuget或使用命令行进行安装&#xff0c;具体需要安装的类库如下&#xff08;注意版本&#xff09;&#xff1a;Install-Package App.Metrics.AspNetCore.Mvc -Version 2.0.0由于我们需要兼容Prometheus进行监控&#xff0c;所以我们还需要安…

matlab贝叶斯优化工具箱_经济学人的神器——BEAR(贝叶斯估计、分析和回归工具包)...

武林至尊&#xff0c;宝刀屠龙&#xff0c;号令天下&#xff0c;莫敢不从&#xff0c;倚天不出&#xff0c;谁与争锋。——金庸《倚天屠龙记》Bayesian Estimation, Analysis and Regression(简写为BEAR) Toolbox是欧央行(ECB)发布的一个综合 (面板)VAR工具箱&#xff0c;通过图…

计算机网络----wireshark抓包

计算机网络----wireshark抓包 抓包截图&#xff1a; 先了解&#xff0c;后期将细讲&#xff01;&#xff01;&#xff01; 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

如何为.NETCore安装汉化包智能感知

引言具体不记得是在群里还是什么地方有人问过&#xff0c;.NETCore有没有汉化包&#xff0c;答案是有&#xff0c;目前微软已经为我们提供了.NETCore多种语言的语言包。下面看看如何安装与使用吧。本文介绍&#xff1a;如何安装这些下载的本地化版本。如何修改Visual Studio安装…

[召集令]-Dijkstra的单源最短路径算法

2021.3.10 题目背景 墨家家主发出召集令&#xff0c;所有弟子得迅速到指定地点集合。 题目描述 给定一张地图&#xff0c;含有n个地点(n<10000)&#xff0c;地点从1开始编号&#xff0c;地图上还含有m条单向路(m<100000)连接着这些地点&#xff0c;墨家家主在1号位置&am…

word List 43

word List 43 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;