例题:将关键字序列1,2,3,4,5,6,7,8,9,10,11, 12,13,14,15,16, 17,18, 19,20建成最大堆

#include<iostream>
using namespace std;
#define N 20
//
//本题是探讨1-20,若探讨1-n,则将20改为n
//
//int T_swap(int n, int *p)//一个函数,若堆上方小则交换,反之不交换{int t = -1;t = n % 2;int tmp = n / 2;switch (t){case 1:if (p[n] > p[tmp]) {swap(p[n], p[tmp]);return 1;}return 999;break;//若只有一个子节点case 0:tmp = tmp - 1;if (p[n] > p[tmp] && p[n] > p[n - 1]) { swap(p[n], p[tmp]);return (int)'r';}if (p[n - 1] > p[tmp] && p[n] < p[n - 1]) {swap(p[n - 1], p[tmp]);return (int)'l';}return 999;break;//若有2个子节点//若返回999,则代表没有交换default:break;return 898989;//不应该有这个值,如果出现则错误}
}int main()
{int p[N];for (int i = 0; i < N; i++){p[i] = i + 1;}//赋值for (int i = N-1; i > 0; i--){int ii;int q = i;do{ ii = 0;if (q >= N || ii == 999)break;ii=T_swap(q, p);if (q >=N||ii==999)break;if (ii == (int)'l') {q = q * 2;if (q >= N)q = q - 1;}if (ii == (int)'r'){q = q * 2 + 2;if (q >= N)q = q - 1;}if (ii == 1)q = q * 2 + 1;} while (ii!=0);//若n节点交换了,则判断n的子节点是否需要交换}for (int i = 0; i < N; i++){cout << p[i] << ",";//输出最后的堆}
}

最终答案为

20,19,15,18,11,13,14,17,9,10,2,12,6,3,7,16,8,4,1,5,

参考仓库 - JerryTan-a11y (tan-jieyuan) - Gitee.com

将1~n的数排成最大堆相关推荐

  1. 堆与优先队列课内模板

    全部数据结构.算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360 先补充两个概念 最大树(最小树) ...

  2. 算法刷题重温(九): 排序算法来啦

    1. 写在前面 这篇文章复习排序算法, 排序算法的重要性也是不言而喻, 并且面试的时候经常会问到第K大,第K小,前K大,前K小的问题, 这往往都是排序算法的解决范畴. 在实际问题中,排序算法也是应用非 ...

  3. 语言ppt课件猜拳_人教版初中数学七年级下册阅读与思考 一次方程组的古今表示及解法公开课优质课课件教案视频...

    一次方程组的古今表示教学设计 一.教学目标 (一)知识与技能 能掌握解二元一次方程组的步骤并能灵活应用. (二)过程与方法 1.通过认识古代的算筹与高中代数的矩阵,增强学生的分析能力,会分析不含未知数 ...

  4. 30分钟回顾AI数学基础知识(一)

    大家好,我是灿视. 最近上课比较多,也在忙着租房子,也算是把这些事情给忙差不多了.这两天也在做作业,看着老师的课件,老师一节课把一些基础东西就给上完了,这里就给各位一起回顾回顾吧. 这里主要根据我们老 ...

  5. P1801-黑匣子_NOI导刊2010提高【堆】

    正题 题目链接: https://www.luogu.org/problemnew/show/P1801 大意 有两种操作, 1.将一个数放入黑匣子中 2.++i之后查询第i小的数(初始为i) 解题思 ...

  6. Java的GC机制及算法

    转载自   Java的GC机制及算法 GC的阶段  对每个对象而言,垃圾回收分为两个阶段:finalization和reclamation. finalization: 指运行这个对象的finaliz ...

  7. 黑白翻转棋算法java实现_黑白翻转棋算法java实现

    翻转游戏是在4*4的正方形里进行的,每个小正方形放有拥有黑白两面的棋子.每一轮你翻转3-5个棋子,把它从白变黑或从黑变白. 翻转的规则如下: 1. 选择任意一个棋子. 2. 翻转选择的棋子和与它相临的 ...

  8. 计算机课里的余数是什么,余数

    余数,数学用语.在整数的除法中,只有能整除与不能整除两种情况.当不能整除时,就产生余数,取余数运算 a mod b = c(b不为0)表示整数a除以整数b所得余数为c.例如:7÷3 = 2-1,更专业 ...

  9. 排序算法大比拼(2.1)——时间O(n log2n)篇之归并排序

    文章目录 排序算法时间O(n log2n)篇概述 算法思路 动画演示 代码实现 算法特点 总结 排序算法时间O(n log2n)篇概述 在排序算法中,平均时间O(n log2n)是除特殊排序算法之外最 ...

最新文章

  1. 阿里云网盘内测_阿里云网盘内测,下载10M/s;百度网盘...?
  2. python cookbook 豆瓣_备受好评的20本python图书,不用到处找了!
  3. springmvc常用5种注解_电线电缆工业中常用的5种线缆
  4. touch事件总结,监听屏幕点击事件
  5. 高可用集群的脑裂问题
  6. 毕啸南专栏 | 对话百度王海峰:AI时代会产生新巨头
  7. MySql查询某列是否包含汉字
  8. (二)第一个Servlet
  9. Linux服务器部署javaweb项目,从环境配置,到最终系统运行
  10. 交通仿真软件测试自学,交通仿真及常用的仿真软件简介
  11. 渗透开发-XSS扫描器
  12. 按120分计算成绩 mysql_mySql数据库基础
  13. 【Windows】Windows设置IP与DNS(交互界面和CMD命令行)
  14. 截止失真放大电路_【电子干货377】晶体三极管的一些常见应用电路
  15. 安装mentohust 64位
  16. 腾讯秋招--微信支付面经
  17. 计算机毕业设计Node.js+uniapp安卓劳务派遣APP(源码+程序+lw+远程调试)
  18. 计算机其他图标删除,我的电脑其他图标删除方法介绍
  19. Maven - 客户端 Nexus 配置
  20. 网站正式上线之前的ICP备案和公安联网备案

热门文章

  1. html5图片墙,超炫酷。
  2. 知识图谱基础【通俗易懂】
  3. [vb版机房] 机房收费系统总结
  4. 抛开你的地图!体验精彩实用的网络虚拟城市!
  5. jeep好好java_17万的Jeep指南者真的好吗?开了7个月后,车主说了真实感受
  6. 【C语言】 基础知识入门
  7. 技术层面看《易语言》与《易飞扬》
  8. 我们在 web 应用开发过程中经常遇到输出某种编码的字符,如 iso8859-1 等,如何输出一个某种编码的字符串?
  9. 安卓AKP升级出现对话框不动的情况
  10. 运动曲线研究(缓动效果)