堆的应用

1)排序 堆排序

选择排序
既可以找到最大的放在最后
也可以找到最小的方最前

但是,堆排序不能找最小的放在最前
因为把最小数放在最前,会破坏掉堆的原来的顺序,除非重新建堆

1, 2,9,16,7,15,18,45,37,63,13

63,45,18,16,37,9,2,7,15,13,1

1,45,18,16,37,9,2,7,15,13, 63 再向下调整即可

堆排序:

             排升序,建大堆排降序,建小堆原因:重新调整回根的成本更小,向下调整(O(logn))<建队O(n)

伪代码

 int   array[]   int size;堆排序,排升序建大堆i=0;i的意义是被选出的最大的数的个数for(i<size-1){        //一次循环,找出一个最大的数放在最后Swap(&array[0],&array[size-1-i])//向下调整AdjustDown(array,size-1-i,0);}

建堆函数

向下调整函数

TopK问题

再海量数据中(n>>100*1000),找最大的k=10个数
建小堆

堆的应用(堆排序,TopK问题)相关推荐

  1. 堆排序时间复杂度_图解堆结构、堆排序及堆的应用

    前言 这次我们介绍另一种时间复杂度为 O(nlogn) 的选择类排序方法叫做堆排序. 我将从以下几个方面介绍: 堆的结构 堆排序 优化的堆排序 原地堆排序 堆的应用 堆的结构 什么是堆?我给出了百度的 ...

  2. 【C】二叉树--顺序结构(详解堆的实现,topK排序、堆排)、和链式结构(链式结构的遍历、链式结构常见递归操作以及练习题)

    本章我们将引入树的概念并详细介绍二叉树.我们会在介绍顺序二叉树基础上,进一步介绍堆以及堆的实现,并以此为依据详解topK排序.堆排等问题:然后我们会介绍链式二叉树的实现以及各种操作.最后,我们也会给出 ...

  3. 算法与数据体系课笔记之-6.堆结构与堆排序

    目录 思维导图链接 6.堆结构与堆排序几个经典题目分析 总览 题1:堆结构 题目描述: 代码实现 题2:堆排序 题目描述: 代码实现 题3:2. 对几乎有序的数组进行排序 题目描述: 代码实现 思维导 ...

  4. < 数据结构 > 堆的应用 --- 堆排序和Topk问题

    目录 1.堆排序 法一:自己写堆进行排序 时间复杂度分析 法二:直接对数组建堆 ①.向上调整建堆 ②.向下调整建堆 向上建堆和向下建堆熟优? 升序能否建小堆? 排序(建大堆) 2.TopK问题 何为T ...

  5. Java堆排序递归_大顶堆第二弹----堆排序(递归实现)

    1 packagecom.datastruct;2 3 importjava.util.ArrayList;4 importjava.util.Arrays;5 6 public classBigHe ...

  6. java 小根堆 排序_堆排序(java实现)

    堆排序就是用大根堆或者小根堆的节点都比左孩子 右孩子大(小)的特性  来构建有序序列. 名词解释: 大根堆:所有节点(n)都比他的左孩子(2n+1)与右孩子(2n+2)大的完全二叉树. 小根堆:所有节 ...

  7. 1.7_heap_sort_堆的向下调整堆排序

    --- 二叉树的顺序存储方式 --- 父节点和左孩子节点的 index: i --> 2i + 1父节点和右孩子节点的 index: i --> 2i + 2孩子找父亲: (i - 1) ...

  8. 创建最大堆、最小堆、图解堆排序

    优先级队列和堆 堆的存储方式 使用数组来保存二叉树,将二叉树的层序遍历结果按顺序放入数组中.这种方式只适合保存完全二叉树,因为非完全二叉树会浪费空间. 最大堆 满足任意节点的值都大于其子树中节点的值, ...

  9. 浅谈大根堆,小根堆,以及堆排序(python)实现

    既然要说堆排序,那么必然要说说什么是大根堆,小根堆了. 大根堆: 若根节点存在左右子节点,那么根节点的值大于或等于左右子节点的值. 小根堆: 若根节点存在左右子节点,那么根节点的值小于或等于左右子节点 ...

  10. 堆的简单应用——TopK

    1.海量数据top k问题 100亿个数中找出最大的前K个数,我们可以遍历K次找到,但是时间复杂度就很大为 O(KN);因此,我们可以用堆来实现,只需遍历一次,思路如下: 如果要找前K个最大的数,我们 ...

最新文章

  1. A Fully Featured Windows HTTP Wrapper in C++
  2. 防火墙简介(二)——firewalld防火墙
  3. [css] 请你解释下什么是浮动和它的工作原理是什么?同时浮动会引起什么问题?
  4. linux下printf语句执行时间,linux下printf中\n刷新缓冲区的疑问(已解决)
  5. 快速安装 Moodle 指南
  6. c++中的运算符异或^,与,或|
  7. 机器学习(6): 层次聚类 hierarchical clustering
  8. python现有两个磁盘文件a和b_有两个磁盘文件a和b,各存放一行字母,今要求把这两个文件中的信息合并...
  9. 微课|中学生可以这样学Python(8.4节):递归算法例题讲解3
  10. Lightroom Classic 教程,如何使用 Photoshop 和 Lightroom 优化照片?
  11. VS2015 LINK : warning LNK4068: 未指定 /MACHINE;默认设置为 X86
  12. datagrid 重载本地数据_DataGrid 的DataSource重新加载数据
  13. mysql 帮助文档使用
  14. Vue使用Upload上传图片报错:TypeError: Cannot create property 'xxx' on string 'xxxx'
  15. saas系统需要什么样的云服务器,SAAS系统和云服务器的区别
  16. 每个程序猿都有个黑客小宇宙,自敲代码的时候就爆发了一发不可收拾
  17. 华为机试真题 C++ 实现【叠积木】
  18. 华为mate30pro和华为p40pro有什么区别
  19. 机器学习(周志华) 第十章降维与度量学习
  20. 走进PEP8——代码规范

热门文章

  1. 教务管理及教材订购系统设计文档
  2. stixel world论文总结
  3. 20170907wdVBA_GetCellsContentToExcel
  4. 特性Attribute
  5. hdu 4857 逃生 拓扑排序
  6. oracle数据库swap占用率高,物理内存空余很多,swap被持续占用的问题
  7. 本地执行php查看内存占用,查看页面执行php占用内存情况
  8. mysql添加映射模块_iis7.5中让html与shtml一样支持include功能(添加模块映射)
  9. php设置排序,7种php基本排序实现方法
  10. 卷积神经网络语音识别_用于物体识别的3D卷积神经网络