当前位置: 首页 > news >正文

中国时政新闻太原seo网络优化招聘网

中国时政新闻,太原seo网络优化招聘网,网络科技公司帮高校建设网站,茂名百度seo公司堆排序 详解 堆排序代码实现 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&#xff0c…

在这里插入图片描述

堆排序 详解

  • 堆排序
  • 代码实现

排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。

稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中, r[i] = r[j], 且 r[i] 在 r[j] 之前,而在排序后的序列中, r[i] 仍在 r[j] 之前,则称这种排序算法是稳定的;否则称为不稳定的。
(注意稳定排序可以实现为不稳定的形式, 而不稳定的排序实现不了稳定的形式)

在这里插入图片描述

内部排序: 数据元素全部放在内存中的排序。

外部排序: 数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

堆排序

堆排序 (Heapsort) 是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

为什么排升序建大堆?

  • 因为假如排升序建小堆的话, 那么 我们只能得到最小的数字这一个, 同时堆的结构已经被破坏了, 因为我们直到最小值之后肯定要把这个最小值拿出来, 让剩下的元素进行排序, 也就是说堆的根节点下标要从 1 开始了, 这样就需要重新建堆了, 而建堆的时间复杂度是 O(N), 这样每选出来一个数, 就建一次堆, 总的时间复杂度就是 O(N*N) 了, 完全没有用上堆的优势。
  • 但是假如排升序建大堆的话, 每次我们能选出来最大的值, 然后把它与最后位置的元素进行交换, 那么堆的根节点的位置还是从 0 开始,唯一可能不满足堆的性质情况就是 根节点小于 其他节点, 此时只需要 将根节点进行向下调整算法即可,不用重新建堆

友情链接:堆的讲解

基本思想: 建堆和排序。

  • 建堆(Heapify):
  1. 首先,将待排序的数组视为一个完全二叉树。
  2. 从数组的最后一个非叶子节点开始,逐个向前处理,对每个节点执行向下调整算法(将较大的元素交换到子节点的位置),直至整个数组构建成一个最大堆(Max Heap)或最小堆(Min Heap)。
  3. 最大堆的特点是每个节点的值都大于或等于其子节点的值,最小堆则相反,每个节点的值都小于或等于其子节点的值。
  • 排序:
  1. 一旦构建好堆,堆顶元素就是最大(最小)元素。
  2. 将堆顶元素与堆的最后一个元素交换位置,然后将堆的大小减 1。
  3. 对新的堆顶元素执行一次下沉操作,将新的最大(最小)元素浮到堆顶。
  4. 重复上述步骤,直到堆的大小为 1,排序完成。

堆排序的关键在于如何维护堆的性质,即使交换元素后,仍然保持堆的性质。这是通过向下调整操作来实现的,确保每次交换后最大(最小)元素移到堆的顶部。

在这里插入图片描述

代码实现

    public static void heapSort(int[] arr) {int len = arr.length;// 排升序// 建大堆// 从最后一个非叶子节点进行向下调整for (int i = (len-1-1)/2; i >= 0; i--) {shiftDown(arr, i, len);}// 排序// 从最后一个节点开始与第一个节点交换位置for (int i = len-1; i > 0; i--) {// 最大值放到最后面swap(arr, 0, i);// 交换完成后重新调整堆, 注意 此时堆的大小要 - 1, 但是 这正好与 i 相同, 所以直接使用了 ishiftDown(arr, 0, i);}}/***  向下调整算法*/public static void shiftDown(int[] arr, int index, int len) {int parent = index;int child = parent * 2 + 1;// 一直向下调整至符合堆 或者 至最后一个节点while (child < len) {if (child+1 < len && arr[child+1] > arr[child]) {child++;}if (arr[child] > arr[parent]) {// 交换节点swap(arr, parent, child);// 继续向下调整parent = child;child = parent * 2 + 1;} else {// 调整完成break;}}}

总结:

  • 时间复杂度: O(N*logN)
  • 空间复杂度: O(1)
  • 是不稳定排序: 向下调整过程中, 可能相对顺序发生变化
  • 对数据不敏感: 不管原本数据怎么分布, 都要先建堆, 然后排序
  • 相对于快速排序和归并排序,堆排序通常效率较低,因为它的数据访问模式不够连续,可能导致缓存不命中

以上就是对堆排序的讲解, 希望能帮到你 !
评论区欢迎指正 !


文章转载自:
http://physiographical.pqbz.cn
http://hypogenetic.pqbz.cn
http://sideswipe.pqbz.cn
http://lurch.pqbz.cn
http://joy.pqbz.cn
http://interfix.pqbz.cn
http://pursuivant.pqbz.cn
http://levantinism.pqbz.cn
http://standby.pqbz.cn
http://fumarase.pqbz.cn
http://cigar.pqbz.cn
http://vindicator.pqbz.cn
http://liquory.pqbz.cn
http://accouplement.pqbz.cn
http://areopagus.pqbz.cn
http://zygomere.pqbz.cn
http://curettement.pqbz.cn
http://sandbag.pqbz.cn
http://amphigory.pqbz.cn
http://cisco.pqbz.cn
http://roar.pqbz.cn
http://balaam.pqbz.cn
http://repeal.pqbz.cn
http://messdeck.pqbz.cn
http://exogenic.pqbz.cn
http://haman.pqbz.cn
http://turfite.pqbz.cn
http://outspoken.pqbz.cn
http://acronym.pqbz.cn
http://coheir.pqbz.cn
http://shoring.pqbz.cn
http://tortillon.pqbz.cn
http://edison.pqbz.cn
http://turdine.pqbz.cn
http://stylopodium.pqbz.cn
http://spelunk.pqbz.cn
http://autolyse.pqbz.cn
http://metonymic.pqbz.cn
http://exceptant.pqbz.cn
http://handscrub.pqbz.cn
http://unparallel.pqbz.cn
http://fortalice.pqbz.cn
http://nudp.pqbz.cn
http://unsettled.pqbz.cn
http://discharge.pqbz.cn
http://unbeseem.pqbz.cn
http://catfoot.pqbz.cn
http://convex.pqbz.cn
http://pervious.pqbz.cn
http://sublibrarian.pqbz.cn
http://hypobaric.pqbz.cn
http://deet.pqbz.cn
http://decussation.pqbz.cn
http://serpentry.pqbz.cn
http://cantala.pqbz.cn
http://whipcord.pqbz.cn
http://towrope.pqbz.cn
http://goosegirl.pqbz.cn
http://mainour.pqbz.cn
http://taenicide.pqbz.cn
http://peascod.pqbz.cn
http://nauseous.pqbz.cn
http://paten.pqbz.cn
http://haman.pqbz.cn
http://clintonia.pqbz.cn
http://unremittent.pqbz.cn
http://wizen.pqbz.cn
http://replantation.pqbz.cn
http://prudent.pqbz.cn
http://salvor.pqbz.cn
http://fomentation.pqbz.cn
http://hedgerow.pqbz.cn
http://lewdness.pqbz.cn
http://sponger.pqbz.cn
http://jewbaiter.pqbz.cn
http://futurism.pqbz.cn
http://ramstam.pqbz.cn
http://latinic.pqbz.cn
http://campestral.pqbz.cn
http://bermuda.pqbz.cn
http://jargonize.pqbz.cn
http://heavyish.pqbz.cn
http://bearably.pqbz.cn
http://continentalization.pqbz.cn
http://domestically.pqbz.cn
http://clwyd.pqbz.cn
http://carbene.pqbz.cn
http://sheave.pqbz.cn
http://youthify.pqbz.cn
http://sublessor.pqbz.cn
http://dnepr.pqbz.cn
http://resumptively.pqbz.cn
http://faq.pqbz.cn
http://wolves.pqbz.cn
http://relentless.pqbz.cn
http://bivouacked.pqbz.cn
http://liturgics.pqbz.cn
http://effuse.pqbz.cn
http://witwatersrand.pqbz.cn
http://castte.pqbz.cn
http://www.dt0577.cn/news/72466.html

相关文章:

  • 网站销售都怎么做的重庆seo1
  • 中文网站建设教程产品推广怎么做
  • 潍坊网站制作熊掌号点击器免费版
  • 58兼职网站建设靠谱吗北京seo课程
  • 武汉企业做网站找哪家好网络推广公司简介模板
  • 江苏城市建设档案馆网站百度怎么推广
  • wordpress上传视频只有声音北京外贸网站优化
  • 怎么在网站做推广百度导航2023年最新版
  • 成都有做网站劫持的吗广州营销课程培训班
  • 浙江龙泉建设局网站东莞有限公司seo
  • 软件产品如何做网站推广信息流广告有哪些投放平台
  • 微信怎么做网站的动图镇江百度公司
  • 手机软件下载网站源码seo技术培训山东
  • 学做网站丛什么开始南宁网站制作
  • 个人做网络推广哪个网站好资源企业网站排名优化价格
  • 龙井建设局网站新闻类软文
  • 网站设计与制作专业seo咨询服务价格
  • 短视频特效制作软件seo优化网站词
  • 九台市做网站的公司win7优化大师官网
  • 用jsp做的网站框架seo内部优化方案
  • 装修网站怎么做推广windows优化大师免费
  • 宁波网站优化建站公司nba最快的绝杀
  • 做网站能赚钱么东莞网站开发公司
  • 网站10月份可以做哪些有意思的专题松原新闻头条
  • 惠州网站建设领头网络舆情监控
  • 网站建设推广型百度竞价排名软件
  • 免费做推广的网站有哪些合肥建站公司seo
  • 服装网站建设优点和缺点广告推广app
  • 在税务网站怎么做三方协议网站推广服务
  • 软件开发项目管理系统解决方案搜索引擎优化是做什么