数据结构六——堆

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。

1 堆定义

1.1 定义和结构

堆是一个完全二叉树(完全二叉树:除了叶子节点外每一层节点都是满的,最后一层的子节点都靠左排列);堆中每个节点的值都大于等于(或小于等于)其子树中的每个节点的值。
  因为堆是一个完全二叉树,所以可以用数组来表示堆。如果根节点存在在下标为1的位置。下标i存储节点,下标2i存储节点的左子节点,2i+1存储节点的右子节点。
在这里插入图片描述

1.2 操作和存储结构

1.2.1 插入元素

在这里插入图片描述
  向一个堆中插入一个元素,直接放在最后一个位置可能会破坏堆的结构,于是就需要进行调整。这个过程称为堆化。堆化分为两种:从下向上、从上往下。现在先看从下向上。堆化就是沿着路径不断向上比较,如果不满足大小关系,就交换。直到满足堆条件。
  

1.2.2 删除堆顶元素

当删除堆顶的元素之后,需要做一些操作才能称为新的堆。假设删除的是一个大顶堆,堆顶放的是最大元素。

  删除堆顶元素33,将最后一个节点的值12赋值给根节点。然后对根节点做堆化,从上往下的。如果不满足大小关系,将根节点沿着路径选择较大值的子节点和根节点交换。继续交换直到满足堆定义。

1.3 相关代码

代码

2 堆排序

堆排序时间复杂度是O(nlogn),是原地排序,但不是稳定排序。堆排序过程分为建堆和排序两个阶段。

2.1建堆

输入一个数组,原地将这个数组建堆,不使用额外的空间。
我们可以把这个过程看作是堆的插入过程。先假设堆起初只包含下标为1的元素。调用插入方法将下标从2到n的数据依次插入。这样建堆就完成了。
第二种处理方法是从后往前处理数据。对每一个数据做从上往下的堆化。也就是说以当前节点为根节点,比较其与子树上每个节点的值,保证符合堆定义。叶子节点堆化只能和自己比较,故,省略,从2n\dfrac{2}{n}n2开始处理数据。
在这里插入图片描述在这里插入图片描述如果我们需要从小到大排序数组。在建堆的时候我们可以建一个大顶堆

2.2 排序

建堆结束,我们已经有了一个大顶堆。堆顶元素是最大的。如果我们把堆顶元素和最后一个元素交换位置,模拟堆顶元素删除操作,将这n-1个元素堆化。继续将堆顶元素和倒数第二个元素交换位置,继续堆化这n-2个元素。直至堆的大小为1,则得到一个从小到大排序的数组。
在这里插入图片描述

2.3 时间复杂度

1 用递归树法求建堆的时间复杂度:O(n)。
2 排序时间复杂度:O(nlogn)。
所以最终时间复杂度O(nlogn)。

2.4 为什么使用快排而不是堆排序

1 因为堆排序的比较次数、移动次数比较高。
2 堆排序不是稳定排序。在前后交换过程中会改变数据的前后顺序。
3 数据访问方式是跳跃式的,不利于使用CPU缓存机制。

代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring学习(9):idea的config配置

点开eventlog 点击之后 勾选 apply---ok

[hackinglab][CTF][上传关][2020] hackinglab 上传关 writeup

上传关 1 请上传一张jpg格式的图片 关键字: 步骤: 1.F12查看源码 2.输入网址 获得key http://lab1.xseclab.com/upload1_a4daf6890f1166fd88f386f098b182af/upload_file.php上传关 2 关键字:burp 知识点: 步骤:看源…

靠谱的Pycharm安装详细教程

如何在本机上下载和安装Pycharm,具体的教程如下: 1、首先去Pycharm官网,或者直接输入网址:http://www.jetbrains.com/pycharm/download/#sectionwindows,下载PyCharm安装包,根据自己电脑的操作系统进行选择…

第四十四期:Keep突然大裁员,回应称“属正常调整”!

10 月 24 日程序员节原本是程序员们最开心的一天,但 Keep 程序员却开心不起来,因为不少人突然面临失业危机。\ 作者:51CTO 10 月 24 日程序员节原本是程序员们最开心的一天,但 Keep 程序员却开心不起来,因为不少人突然…

第四十五期:万亿级日访问量下,Redis在微博的9年优化历程

Redis在微博内部分布在各个应用场景,比如像现在春晚必争的“红包飞”活动,还有像粉丝数、用户数、阅读数、转评赞、评论盖楼、广告推荐、负反馈、音乐榜单等等都有用到Redis。 作者:兰将州来源 一、Redis在微博的应用场景 Redis在微博内部…

数据结构七——图

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 基本概念 顶点、边 微信:A和B是好朋友,B也和A是好朋友,A和B之间有条边。 入度:每个顶点链接的边的个数每个人好朋友…

[CTF][Web][PHP][JavaScript]弱类型问题

弱类型问题 类型转换是无法避免的问题。例如需要将GET或者是POST的参数转换为int类型,或者是两个变量不匹配的时候,PHP会自动地进行变量转换。但是PHP是一个弱类型的语言,导致在进行类型转换的时候会存在很多意想不到的问题。 如果在用于密…

第四十六期:最近程序员频繁被抓,如何避免面向监狱编程?!

最近,有很多关于程序员被抓甚至被判刑的新闻在朋友圈疯传:"某程序员因为接了个外包,帮别人写了个软件,结果这个软件被用于赌博导致被抓。某公司利用爬虫抓取用户信息,最后被发现,导致该公司的程序员被…

算法五——字符串匹配(上)

文章内容、图片均来自极客时间。 如何借助哈希算法实现高效字符串匹配 1 概念和用途 字符串匹配:查找一个字符串A在字符串B中是否出现,这个过程就是字符串匹配。A称为模式串,B称为主串。主串的长度记为n,模式串长度记为m。n>…

算法五——字符串匹配(中)

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1文本编辑器中的查找功能怎么实现 在word中有一个功能:查找某个字符串,将其替换为另一个字符串,就会用到这个功能。 需要新算法的…

第四十七期:漫画:什么是公有云、私有云和混合云?

为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 作者:漫话编程 为了方便大家理解,我们尽量用通俗的语言和举例子的方式讲解,并且文中还配备了漫画供大家参考学习。 …

第四十八期:你太菜了,竟然不知道Code Review?

我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。 作者:宝玉 我一直认为Code Review(代码审查)是软件开发中的优秀实践之一,可以有效提高整体代码质量&…

算法五——字符串匹配(下)KMP

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 KMP,是三个作者(D.E.Knuth,J.H.Morris和V.R.Pratt)的简称。   KMP算法和BM一样,也是一个字符串匹配算法。…

第四十九期:大牛总结的MySQL锁优化,写得太好了!

随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技术在不断更新换代,但是有些技术依旧被一代代 IT 人使用至今。 作者:崔皓 随着 IT 技术的飞速发展,各种技术层出不穷,让人眼花缭乱。尽管技…

数据结构八-Trie树

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 Trie树的使用场景 搜索引擎中的搜索词建议。当你在搜索引擎中输入词,搜索引擎提示给你一个词的列表,帮助你快速输入想搜索的词。 这个功能…

[安全模型][Cambria Math][A][]敌手A-> 怎么打出来?

字母A 设置字体 “Cambria Math” -> 𝒜

第五十期:详解语音识别技术的发展

在我们的生活中交流起着重要的作用。人类从符号开始,然后发展到用语言交流,再后来出现了计算和通信技术。在某些情况下,机器不仅与人类交流,也与机器之间交流。计算机和通信技术创造了互联网世界,正如我们所知的物联网…

打造移动测试云平台

转载来源:https://blog.csdn.net/toafu/article/details/80598977 背景 移动技术发展到现阶段,原生、混合式技术发展的足够成熟,可以无缝融合。而随着移动技术的发展和革新,移动领域的测试技术和实践也有了一定发展:工…

AC自动机:多模式串匹配实现敏感词过滤

文章出处:极客时间《数据结构和算法之美》-作者:王争。该系列文章是本人的学习笔记。 1 敏感词过滤场景 在很多支持用户发表内容的网站,都有敏感词过滤替换的功能。例如将一些淫秽、反动内容过滤掉,或者替换为****。在一些社交类…

[毕业论文][格式修改][摘要修改]毕业论文格式内容修改小技巧

背景 毕业季临近,盲审前对毕业论文进行最后一次逐行逐字修改,遇到的一些问题和解决办法 1.自动生成的目录行距可能不一。需要选中后单独再段落种设置行距 2.符号问题 配合查找发现问题 双引号 英文 “English” 中文“” 逗号 英文 English, 中文 &am…