前言 逆水行舟,不进则退!!! 目录 认识堆 堆的创建 1,向下调整的方法建立堆 2,以向下调整的方式建立小根堆 3,向上调整的方式建堆 堆的插入 堆的删除 堆排序 堆排序稳定性证明 TOP-K问题 实现堆操作的完整代码 认识堆 堆其实是一棵完全二叉树,完全二叉树是一种特殊的二叉树,除了最后一层外,每一层都被完全填满,最后一层从左到右填充。 对于完全二叉树(根节点下标为0)中任意一个下标为i的结点,它的左孩子结点下标为2i+1,右孩子结点下标为2i+2,父节点下标为(i-
作者简介:大家好,我是未央;博客首页:未央.303系列专栏:Java初阶数据结构每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!目录文章目录前言引言一、堆的概念二、堆的性质 三、堆的操作3.1向下调整算法3.2 小根堆的创建3.3 向上调整算法3.4 堆的删除(堆顶元素的删除)四、优先级队列的模拟实现(小根堆)总结今天我们将进入到有关堆的有关内容的学习,以及有关优先级队列的相关使用,要对堆的概念,性质,操作有很熟悉的认识和了解,接下来就让我们进入到今天的学习当中吧!!!!!!引言我们之前学过队列,那么什么是优先级队列呢?举个例子队列是一种先进先出(FIFO)的数据结构,但是有
目录引子 一、堆的概念二、堆的性质 三、堆的操作🍑向下调整算法🍑小根堆的创建🍑向上调整算法🍑堆的插入 🍑堆的删除(堆顶元素的删除)四、优先级队列的模拟实现(小根堆)引子 我们之前学过队列,那么什么是优先级队列呢?🌰举个例子队列是一种先进先出(FIFO)的数据结构,但是有些情况下,操作的数据可能带有优先级,一般出队列时,可能需要优先级高的元素先出队列,在这种情况下使用队列就不行了,比如玩游戏的时候突然女朋友一通电话,游戏屏幕瞬间被电话占领,这时候就应该优先处理电话。在这种情况下,我们的数据结构应该提供两个最基本的操作,一个是返回最高优先级对象,一个是添加新对象,这种数据结构就是优先级队列(Pr
文章目录前言freetalk前言正片时间堆小根堆详解定时器的管理代码heaptimer.hheaptimer.cpp结束语前言freetalk昨天晚上失眠了,到2点估计才睡着,我想这估计和下午那杯咖啡没消化完和我看巅峰说唱看到0:40有关系吧(太兴奋了)导致我今天早上9点半才出寝室,做了几个算法题,一上午就过去了。我已经基本习惯把前言部分当成我的freetalk部分了,每次开启一篇新的篇章的时候,就总想说点心里话,释放自己压力也好,给后人说说听也好。但我想我的初衷其实并不是写出多么高质量高阅读量的文章,这一条路想必有比我更优秀的人在写,如果你觉得我的文章写的烂,可以点击网页的右上角了。我是一个
(1)是什么?是一种适用于关键字较多的情况下的排序算法,例如在十亿个数中选出前1000个最大值或者最小值如果在传统的排序算法中(例如冒泡,插入等),我们习惯把目标数据整体进行一次排序,再截取出前1000个最小的或者最大的。但是我们可以设想一下,从一开始我们目标就只要1000个,那么其实其余九亿九千九百九十九万九千个数据,我们压根不需要知道它们的排序顺序,只需要知道它们都比我们1000个目标数据中最大值都要大就可以了这就是堆排序。它的思想整体上非常清晰简单,结构上是一个完全二叉树。根结点比左右孩子都大则叫做大根堆。其中,左右孩子的根结点,又会比它们的左右孩子都大。根结点比左右孩子都小则叫做小根堆