5.20


前言吐槽:

  • 今天是5.20啦,但是作为单身修狗的我只能和代码过啦。。。继续加油算法打卡!!!

堆排序:

  • 堆就是一棵完全二叉树

  • 二叉堆是一种支持插入,删除,查询最值的数据结构。他其实是一棵满足"堆性质"的完全二叉树,树上的每个节点带有一个权值。若树中的任意一个节点的权值都小于等于其父节点的权值,则称该二叉树满足"大根堆性质”。若树中任意一个节点的权值都大于等于其父节点的权值,则称该二叉树满足"小根堆性质”。

  • 这里采用一个数组来保存二叉堆。逐层从左到右为树中的节点依次编号,把此编号作为节点在数组中存储的位置(下标)。在这种存储方式中,父节点编号等于子节点编号除以2,左子节点编号等于父节点编号乘2,右子节点编号等于左子节点编号乘2加1;

  • 两个基本操作:

  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为止,即整棵树又变成了一个小根堆.
    }
    }
  1. 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++堆排序的更多相关文章

  1. 零基础学C#算法(零基础学算法——C#版)

    今天本人正在看算法方面的书.作为高中数学忘得差不多的渣渣,实在无力.无奈找了本书,c语言写的,哎.我就把其中代码翻译成C#版好了.此坑能否填平,看我耐性和网络支持条件吧.有生之年能看完的话我会把整个项 ...

  2. 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础

    ---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...

  3. Android零基础入门第71节:CardView简单实现卡片式布局

    还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...

  4. 【零基础学习iOS开发】【转载】

    原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...

  5. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇

    从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...

  6. 【零基础学习iOS开发】【01-前言】01-开篇

    本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...

  7. 零基础一年拿下BAT三家offer

    背景 1.本人本科一本双非垫底的那种,硕士211.本硕电子通信,完全0基础,转行一年. 2.研一上第一学期上课+外派到老师合作公司写MATLAB.去年4月开始学习Java. 起步 1.实话说,刚决定转 ...

  8. 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉

    机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...

  9. 快快使用ModelArts,零基础小白也能玩转AI!

    摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...

  10. 零基础的Java小白如何准备初级开发的面试

    对于各位Java程序员来说,只要能有实践的机会,哪怕工资再低,公司情况再一般,只要自己上心努力,就可能在短时间内快速提升,甚至在工作2年后进大厂都有希望,因为项目里真实的开发实践环境是平时学习不能模拟 ...

随机推荐

  1. https原理(六)系统分析

    先解决此前的问题: 1 http原理(三)双向实践(curl) need时java 客户端可访问,但没客户端证书:want时有 后来发现,没有给truststore,猜测为,当springboot读到 ...

  2. 记录自己在对订单进行按日期查询时使用的一种查询的方法,这里的orders是订单表,你也可以改成别的什么表对于最终数据不会造成影响,除非你那个表的数据只有几条那样就会出现查不到日期的情况

    SELECT @date := DATE_ADD(@date, INTERVAL + 1 DAY) days FROM ( SELECT @date := DATE_ADD("2019-06 ...

  3. jubyter notebook 安装conda 虚拟环境

  4. JavaScript严格模式(use strict)

    一.什么是严格模式(strict mode) JavaScript严格模式即在严格模式下运行.严格模式下,你将不能使用未声明的变量. 注意,严格模式需要浏览器的支持:Internet explorer ...

  5. vivado2018.2封装普通IP模块

    将代码打包为一个IP模块 以FIFO代码为例:https://www.cnblogs.com/waqdgstd/p/15267726.html 1.打开向导 2.源文件和外围接口选择,这里不选AXI4 ...

  6. Node.js实现国密算法

    一.node.js环境安装 1 去官网下载压缩包,并放置到/usr/local/bin文件夹下 2 进行环境变量配置 vim /etc/profile 在环境变量文件的末尾添加 export NODE ...

  7. 【转载】ISTQB AL-TA/TTA连载系列06:白盒测试技术的精炼总结

    转载自:https://blog.csdn.net/iteye_13411/article/details/82158591 [概述] 白盒测试,有时候又称为基于结构的测试,特别适用于低级别的测试.根 ...

  8. 查看linux进程启动运行时间

    ps -eo pid,tty,user,lstart,etime,cmd|grep nginx 参数说明: pid:进程ID tty:终端 user:用户 lstart:开始时间 etime:运行时间 ...

  9. Test Fixture框架结构

    Test Fixture框架 1.结构: setup() testcase() teardown() 2.新建unittest文件,命名unittestdemo.py 1 import unittes ...

  10. 替代学习物联网-云服务-01百度云MQTT

     1.登录百度智能云  2.进入 物联网接入 https://console.bce.baidu.com/iot2/core/core/list https://iotcore-dev-tool.gz ...