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. linux 安装 talib 的完美姿势!

    安装 TA-Lib $ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -zxvf ta-li ...

  2. K8s试验环境搭建(一)

    一.kubernetes简介 1.什么是kubernetes? kubernetes是google公司用go语言开发的一套容器编排系统,简称k8s:它主要用于容器编排:所谓容器编排简单的我们可以理解为 ...

  3. css制作仿商城侧边导航

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  4. drf从入门到飞升仙界 06

    模型类准备 from django.db import models # 图书跟作者:多对多,需要建立中间表,但是我们可以通过ManyToManyField自动生成,写在哪里都行 # 图书跟出版社:一 ...

  5. 光纤加速计算 383-高速信号处理板 XCKU060的双路QSFP+光纤PCIe 卡 XCKU060板卡

    基于kintex UltraScale XCKU060的双路QSFP+光纤PCIe 卡 一.板卡概述 本板卡系北京太速科技自主研发,基于Xilinx UltraScale Kintex系列FPGA   ...

  6. tidevice 报UsbmuxReplyCode.BadDevice错误解决办法

    备忘 换了个新手机照常使用tidevice进行操作发现报错 tidevice.exceptions.MuxReplyError: UsbmuxReplyCode.BadDevice 查了好久,终于解决 ...

  7. Python 集合常用方法

    数据类型:int/str/bool/list/dict/tuple/float/set   (set类型天生去重) 一.集合的定义 s = set()  #定义空集合 s = {'a','b','c' ...

  8. Screw数据库文档生成神器

    引入依赖 <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-cor ...

  9. three.js基础用法

    import * as THREE from '../libs/build/three.module.js'; import { OrbitControls } from '../libs/jsm/c ...

  10. HDFS学习记录

    HDFS 1.hdfs整体工作机制: 1>hdfs:分布式文件系统. hdfs:分布式文件系统 hdfs有着文件系统共同的特征: 2>有目录结构,顶层目录是:  / 3>系统中存放的 ...