磊磊零基础打卡算法:day17 c++堆排序
5.20
前言吐槽:
- 今天是5.20啦,但是作为单身修狗的我只能和代码过啦。。。继续加油算法打卡!!!
堆排序:
堆就是一棵完全二叉树
二叉堆是一种支持插入,删除,查询最值的数据结构。他其实是一棵满足"堆性质"的完全二叉树,树上的每个节点带有一个权值。若树中的任意一个节点的权值都小于等于其父节点的权值,则称该二叉树满足"大根堆性质”。若树中任意一个节点的权值都大于等于其父节点的权值,则称该二叉树满足"小根堆性质”。
这里采用一个数组来保存二叉堆。逐层从左到右为树中的节点依次编号,把此编号作为节点在数组中存储的位置(下标)。在这种存储方式中,父节点编号等于子节点编号除以2,左子节点编号等于父节点编号乘2,右子节点编号等于左子节点编号乘2加1;

两个基本操作:
- down(int u);简而言之就是一颗树从u的位置开始往当前这棵树下面的,如果下面 有比u位置的小的话,就去交换
void down(int u) {
// 这个模板的作用是父节点和其两个孩子节点的最小值,再交换父节点和这个最小值
int t = u;
if (u * 2 <= cnt && h[u * 2] < h[t])
t = 2 * u;
if (u * 2 + 1 <= cnt && h[u * 2 + 1] < h[t])
t = 2 * u + 1;
if (u != t) {
swap(h[u], h[t]);
down(t);
//每次这个t都是最小的哈
// 递归处理这个输入的值,直到它down到不能down为止,即整棵树又变成了一个小根堆.
}
}
- down(int u);简而言之就是一颗树从u的位置开始往当前这棵树下面的,如果下面 有比u位置的小的话,就去交换
void up(int u) {
while (u / 2 && h[u / 2] > h[u]) {
swap(h[u], h[u / 2]);
u /= 2;
}
}题目链接:https://www.acwing.com/problem/content/description/840/
#include "iostream"
using namespace std;
const int N = 100010;
int h[N], cnt;
void down(int u) {
int t = u;
if (u * 2 <= cnt && h[u * 2] < h[t])
t = 2 * u;
if (u * 2 + 1 <= cnt && h[u * 2 + 1] < h[t])
t = 2 * u + 1
if (u != t) {
swap(h[u], h[t]);
down(t);
}
}
void up(int u) {
while (u / 2 && h[u / 2] > h[u]) {
swap(h[u], h[u / 2]);
u /= 2;
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> h[i];
cnt = n;
/*
cnt来存节点的最大下标,因为找左右孩子需要用2*u和2*u+1,
为了防止边界值问题,需要判断2*u < n,2*u+1<n;
并且,cnt也可以看成指向堆尾的一个指针。
*/
for (int i = n / 2; i; i--)
down(i);
//初始化小根堆
// 用down函数将整棵树调整为一个小根堆
// 从2分之n开始down,建堆,时间复杂度为O(n)
while (m--) {
cout << h[1] << " ";
h[1] = h[cnt--];
down(1);
}
}
磊磊零基础打卡算法:day17 c++堆排序的更多相关文章
- 零基础学C#算法(零基础学算法——C#版)
今天本人正在看算法方面的书.作为高中数学忘得差不多的渣渣,实在无力.无奈找了本书,c语言写的,哎.我就把其中代码翻译成C#版好了.此坑能否填平,看我耐性和网络支持条件吧.有生之年能看完的话我会把整个项 ...
- 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础
---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...
- Android零基础入门第71节:CardView简单实现卡片式布局
还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
- 【零基础学习iOS开发】【01-前言】01-开篇
本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...
- 零基础一年拿下BAT三家offer
背景 1.本人本科一本双非垫底的那种,硕士211.本硕电子通信,完全0基础,转行一年. 2.研一上第一学期上课+外派到老师合作公司写MATLAB.去年4月开始学习Java. 起步 1.实话说,刚决定转 ...
- 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉
机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...
- 快快使用ModelArts,零基础小白也能玩转AI!
摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...
- 零基础的Java小白如何准备初级开发的面试
对于各位Java程序员来说,只要能有实践的机会,哪怕工资再低,公司情况再一般,只要自己上心努力,就可能在短时间内快速提升,甚至在工作2年后进大厂都有希望,因为项目里真实的开发实践环境是平时学习不能模拟 ...
随机推荐
- linux 安装 talib 的完美姿势!
安装 TA-Lib $ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -zxvf ta-li ...
- K8s试验环境搭建(一)
一.kubernetes简介 1.什么是kubernetes? kubernetes是google公司用go语言开发的一套容器编排系统,简称k8s:它主要用于容器编排:所谓容器编排简单的我们可以理解为 ...
- css制作仿商城侧边导航
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- drf从入门到飞升仙界 06
模型类准备 from django.db import models # 图书跟作者:多对多,需要建立中间表,但是我们可以通过ManyToManyField自动生成,写在哪里都行 # 图书跟出版社:一 ...
- 光纤加速计算 383-高速信号处理板 XCKU060的双路QSFP+光纤PCIe 卡 XCKU060板卡
基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一.板卡概述 本板卡系北京太速科技自主研发,基于Xilinx UltraScale Kintex系列FPGA ...
- tidevice 报UsbmuxReplyCode.BadDevice错误解决办法
备忘 换了个新手机照常使用tidevice进行操作发现报错 tidevice.exceptions.MuxReplyError: UsbmuxReplyCode.BadDevice 查了好久,终于解决 ...
- Python 集合常用方法
数据类型:int/str/bool/list/dict/tuple/float/set (set类型天生去重) 一.集合的定义 s = set() #定义空集合 s = {'a','b','c' ...
- Screw数据库文档生成神器
引入依赖 <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-cor ...
- three.js基础用法
import * as THREE from '../libs/build/three.module.js'; import { OrbitControls } from '../libs/jsm/c ...
- HDFS学习记录
HDFS 1.hdfs整体工作机制: 1>hdfs:分布式文件系统. hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 2>有目录结构,顶层目录是: / 3>系统中存放的 ...