在上一篇文章中,小编为您详细介绍了关于《Java的finalizer?java的gc为什么样要分代》相关知识。本篇中小编将再为您讲解标题一个无序队列“构建平衡二叉树再去查找特定节点 ”与“直接进行快速排序在进行二分查找”谁平均效率最高?堆排序缺点何在。
如果有最坏情况 哪个实用
从复杂度看都①样,构造过程都是O(NlgN),查找是O(lgN)
具体问谁快的话,平均快排后②分要快些吧,毕竟只是原地调整,不涉及大量小内存的申请(树的节点什么的),不过快排最坏可能是O(N^②),而平衡树构建的时间复杂度是稳定在O(NlgN)的
通常后者效率更高。如果序列不需要更新的话,首选后者,否则选前者。
建树即排序,树上查找即②分搜索。
排序后的结果是最平衡的②叉树。
①般来说快排要优于堆排。
要说堆排差在哪里,我觉得可能是:每次移出堆顶最大元素后,都需要从顶部维护最大堆性质导致了过多的数据交换操作。
空间复杂度
堆排和快排都是原址排序算法,即除了输入数组外,仅需要常数个额外的存储空间。
空间复杂度都是 。
时间复杂度
堆排的时间复杂度跟算法相关,比较稳定。因为不管数据如何,堆排都要先构造最大堆,然后①个①个的把堆顶元素移到堆尾,之后再维持最大堆的性质。具体算法见:排序算法-堆排序
而快排的时间复杂度受数据的印象。但①般情况下都不会差到哪里去。下面我们会说。
不管是以上那种排序算法,都涉及到交换数组中两个数据的位置。
我刚才写了个随机模拟程序:
分别使用堆排、快排对 ②⓪个、①⓪⓪ 个、①⓪⓪⓪个随机数据进行排序,并记录平均交换数据的次数。
数组大小 ②⓪ ①⓪⓪ ①⓪⓪⓪
堆排序 ⑦⑧ ⑤⑧⑧ ⑥⓪①⑦
快排 ②⑧ ②⑦① ③⑨⑨⑥
随机试验结果来看,快排的确比堆排好。
关于快排的不稳定
我们常说快排不稳定,跟数据有关,最坏运行时间是 ,那什么情况下才会发生?
了解快排的同学应该知道,快排其实是把数组按照某个基准数据 进行分割,分为大于 的数据(放右边)和小于 的数据(放左边),接着把 放中间;然后对左右分别递归此过程。
那么只有当每次分割数据时,所有数据都小于 ,或者都大于 时,才会产生 的时间复杂度。
分割操作的时间复杂度是
所以时间复杂度为:
发生这种情况的概率是: ,约等于⓪.
从统计学上来说,快排产生的划分 ⑧⓪% 以上都比 ⑨:① 更平衡,另外的 ②⓪% 的划分比 ⑨:① 更不平衡。就算所有的划分都是 ⑨:① ,快排的时间复杂度依然是 .
①⑦-⓪⑧-②⓪ 更新:
上述回答没有怎么对 heap sort “make poor use of cache memory\" 做解释,是因为自己也没有想太明白。
刚才在《算法导论》上看基数排序是也看到了这么①句话:快速排序通常比基数排序更有效地舒勇硬件的缓存。
仔细想①想,快排除了数据交换操作少之外,它的循环比价操作是拿 与 ,进行比较,其中 是循环的下标, 是选中的基准点,①般选 首部或尾部。
而堆排序比较的是 、 与 。
在硬件基础上,快排的基准点 每次循环时都要访问,更容易缓存命中,但堆排的中的数据相比来说没那么容易。所以说 heap sort “make poor use of cache memory\"。
编后语:关于《一个无序队列“构建平衡二叉树再去查找特定节点 ”与“直接进行快速排序在进行二分查找”谁平均效率最高?堆排序缺点何在》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《双面文件单面分别扫描后如何在adobe中拼合排序?Adobe Photoshop CS6 Extended x64简体中文完整版下载地址》,感兴趣的同学可以点击进去看看。
小鹿湾阅读 惠尔仕健康伙伴 阿淘券 南湖人大 铛铛赚 惠加油卡 oppo通 萤石互联 588qp棋牌官网版 兔牙棋牌3最新版 领跑娱乐棋牌官方版 A6娱乐 唯一棋牌官方版 679棋牌 588qp棋牌旧版本 燕晋麻将 蓝月娱乐棋牌官方版 889棋牌官方版 口袋棋牌2933 虎牙棋牌官网版 太阳棋牌旧版 291娱乐棋牌官网版 济南震东棋牌最新版 盛世棋牌娱乐棋牌 虎牙棋牌手机版 889棋牌4.0版本 88棋牌最新官网版 88棋牌2021最新版 291娱乐棋牌最新版 济南震东棋牌 济南震东棋牌正版官方版 济南震东棋牌旧版本 291娱乐棋牌官方版 口袋棋牌8399 口袋棋牌2020官网版 迷鹿棋牌老版本 东晓小学教师端 大悦盆底 CN酵素网 雀雀计步器 好工网劳务版 AR指南针 布朗新风系统 乐百家工具 moru相机 走考网校 天天省钱喵 体育指导员 易工店铺 影文艺 语音文字转换器