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

十大网站建设百度店铺注册

十大网站建设,百度店铺注册,商务网站规划与建设,欧盟理事会主席堆排序详解 堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它的核心思想是利用堆的性质(最大堆或最小堆)来实现排序。堆排序分为两个主要步骤:建堆和排序。 1. 什么是堆? 堆是一种特殊的完全二叉…

堆排序详解

堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法。它的核心思想是利用堆的性质(最大堆或最小堆)来实现排序。堆排序分为两个主要步骤:建堆排序


1. 什么是堆?

堆是一种特殊的完全二叉树,分为两种:

  • 最大堆:每个节点的值都大于或等于其子节点的值。
  • 最小堆:每个节点的值都小于或等于其子节点的值。

在堆排序中,通常使用最大堆


2. 堆排序的步骤
步骤1:建堆
  • 将待排序的数组看作一个完全二叉树。
  • 从最后一个非叶子节点开始,逐步调整每个子树,使其满足最大堆的性质。
  • 调整的过程称为堆化(Heapify)
    • 比较当前节点与其左右子节点,找到最大值。
    • 如果最大值不是当前节点,则交换它们的位置。
    • 继续向下调整,直到子树满足最大堆的性质。
步骤2:排序
  • 将堆顶元素(最大值)与数组的最后一个元素交换,此时最大值已经放到正确的位置。
  • 排除最后一个元素,对剩余的堆重新进行堆化,使其再次满足最大堆的性质。
  • 重复上述过程,直到堆中只剩下一个元素。

3. 堆排序的特点
时间复杂度
  • 建堆:( O(n) )
  • 排序:每次堆化需要 ( O(\log n) ),总共需要 ( n-1 ) 次堆化,因此排序的时间复杂度为 ( O(n \log n) )。
  • 总时间复杂度:( O(n \log n) )
空间复杂度
  • 堆排序是原地排序算法,不需要额外的存储空间,空间复杂度为 ( O(1) )。
稳定性
  • 堆排序是不稳定的排序算法,因为在交换堆顶元素和最后一个元素时,可能会改变相同元素的相对顺序。

4. 堆排序的优缺点
优点
  • 时间复杂度稳定,最坏情况下也是 ( O(n \log n) )。
  • 不需要额外的存储空间,适合内存受限的环境。
缺点
  • 不稳定排序,可能改变相同元素的相对顺序。
  • 在实际应用中,由于频繁的交换操作,堆排序的常数因子较大,性能可能不如快速排序或归并排序。

5. 堆排序的应用场景
  • 适合需要排序大规模数据的场景,尤其是对内存使用有严格限制的环境。
  • 常用于实现优先队列。

总结
  • 堆排序是一种高效的排序算法,通过构建最大堆并逐步提取最大值来实现排序。虽然它的时间复杂度较好,但由于其不稳定性和较大的常数因子,在实际应用中需要根据具体需求选择是否使用。
  • 堆排序通过建堆和排序两个步骤,逐步将最大值放到数组末尾,最终实现排序。它的时间复杂度为O(nlogn),是一种高效的排序算法。

堆排序详解(结合例子和图形)

我们通过一个具体的例子和图形来讲解堆排序的过程。

例子

假设我们有一个待排序的数组:
[4, 10, 3, 5, 1]
我们的目标是将这个数组按升序排列。

步骤1:建堆

将数组看作一个完全二叉树:

        4/ \10  3/ \5   1
目标:

将这个二叉树调整为最大堆(每个节点的值都大于或等于其子节点的值)。

调整过程
  • (1) 从最后一个非叶子节点开始(节点 10)。

  • (2) 比较节点 10 和其子节点 5 和 1,发现 10 已经是最大值,无需调整。

  • (3) 调整节点 4:

    • 比较节点 4 和其子节点 10 和 3,发现 10 是最大值。

    • 交换 4 和 10。

    • 调整后的树:

          10/ \4    3/ \
      5   1
      
  • (4) 继续调整节点 4:

    • 比较节点 4 和其子节点 5 和 1,发现 5 是最大值。

    • 交换 4 和 5。

    • 调整后的树:

          10/ \5    3/ \
      4   1
      

现在,树已经是一个最大堆。


步骤2:排序
目标:将堆顶元素(最大值)放到数组末尾,并逐步缩小堆的范围。
排序过程
  • (1) 将堆顶元素 10 与最后一个元素 1 交换:

    [1, 5, 3, 4, 10]

    树结构:

          1/ \5    3/4
    
  • (2) 排除最后一个元素 10,对剩余部分重新堆化:

    • 调整节点 1:

      • 比较节点 1 和其子节点 5 和 3,发现 5 是最大值。

      • 交换 1 和 5。

      • 调整后的树:

            5/ \1    3/
        4
        
    • 继续调整节点 1:

      • 比较节点 1 和其子节点 4,发现 4 是最大值。

      • 交换 1 和 4。

      • 调整后的树:

            5/ \4    3/
        1
        
  • (3) 将堆顶元素 5 与最后一个元素 1 交换:
    [1, 4, 3, 5, 10]

    树结构:

          1/ \4    3
    
  • (4) 排除最后一个元素 5,对剩余部分重新堆化:

    • 调整节点 1:

      • 比较节点 1 和其子节点 4 和 3,发现 4 是最大值。

      • 交换 1 和 4。

      • 调整后的树:

        4/ \
      1    3
      
  • (5) 将堆顶元素 4 与最后一个元素 3 交换:

[3, 1, 4, 5, 10]

树结构:

      3/1
  • (6) 排除最后一个元素 4,对剩余部分重新堆化:

    • 调整节点 3:

    • 比较节点 3 和其子节点 1,发现 3 已经是最大值。

    • 无需调整。

  • (7) 将堆顶元素 3 与最后一个元素 1 交换:
    [1, 3, 4, 5, 10]

最终结果

数组已经按升序排列:
[1, 3, 4, 5, 10]

图形总结
  • (1) 初始数组:

    [4, 10, 3, 5, 1]

  • (2) 建堆后:

    [10, 5, 3, 4, 1]

  • (3) 排序过程:

    每次将堆顶元素放到数组末尾,并重新堆化。

  • (4) 最终结果:

[1, 3, 4, 5, 10]

示例代码

def heapify(arr, n, i):"""堆化函数:调整以 i 为根的子树,使其满足最大堆的性质。:param arr: 待排序的数组:param n: 堆的大小:param i: 当前根节点的索引"""largest = i  # 初始化最大值为根节点left = 2 * i + 1  # 左子节点的索引right = 2 * i + 2  # 右子节点的索引# 如果左子节点存在且大于根节点if left < n and arr[left] > arr[largest]:largest = left# 如果右子节点存在且大于根节点if right < n and arr[right] > arr[largest]:largest = right# 如果最大值不是根节点,则交换并继续堆化if largest != i:arr[i], arr[largest] = arr[largest], arr[i]  # 交换heapify(arr, n, largest)  # 递归调整子树def heap_sort(arr):"""堆排序函数:param arr: 待排序的数组"""n = len(arr)# 步骤1:建堆# 从最后一个非叶子节点开始,逐步调整for i in range(n // 2 - 1, -1, -1):heapify(arr, n, i)# 步骤2:排序# 将堆顶元素(最大值)与数组末尾元素交换,并重新堆化for i in range(n - 1, 0, -1):arr[0], arr[i] = arr[i], arr[0]  # 将最大值放到数组末尾heapify(arr, i, 0)  # 重新堆化剩余部分# 示例
arr = [4, 10, 3, 5, 1]
print("排序前:", arr)
heap_sort(arr)
print("排序后:", arr)

© 著作权归作者所有


文章转载自:
http://hying.ptzf.cn
http://ccs.ptzf.cn
http://cloddy.ptzf.cn
http://deuxchevaux.ptzf.cn
http://pinnate.ptzf.cn
http://feticide.ptzf.cn
http://emptysis.ptzf.cn
http://sinistrocular.ptzf.cn
http://hovel.ptzf.cn
http://raisin.ptzf.cn
http://chechia.ptzf.cn
http://simferopol.ptzf.cn
http://elevation.ptzf.cn
http://eidoptometry.ptzf.cn
http://quiet.ptzf.cn
http://interrupt.ptzf.cn
http://turnside.ptzf.cn
http://vaccinotherapy.ptzf.cn
http://capricornus.ptzf.cn
http://joyful.ptzf.cn
http://sepulcher.ptzf.cn
http://jildi.ptzf.cn
http://nonproductive.ptzf.cn
http://myiasis.ptzf.cn
http://histone.ptzf.cn
http://anagrammatize.ptzf.cn
http://seismologist.ptzf.cn
http://door.ptzf.cn
http://rod.ptzf.cn
http://solodize.ptzf.cn
http://horsecouper.ptzf.cn
http://independentista.ptzf.cn
http://orle.ptzf.cn
http://sunroof.ptzf.cn
http://deucedly.ptzf.cn
http://covertly.ptzf.cn
http://lode.ptzf.cn
http://smuggle.ptzf.cn
http://oversee.ptzf.cn
http://interchurch.ptzf.cn
http://rostov.ptzf.cn
http://richly.ptzf.cn
http://octant.ptzf.cn
http://barman.ptzf.cn
http://trucker.ptzf.cn
http://pood.ptzf.cn
http://imprimatura.ptzf.cn
http://statistically.ptzf.cn
http://extrasystolic.ptzf.cn
http://enisei.ptzf.cn
http://angus.ptzf.cn
http://everyplace.ptzf.cn
http://minx.ptzf.cn
http://nihil.ptzf.cn
http://economism.ptzf.cn
http://potato.ptzf.cn
http://outfight.ptzf.cn
http://asthenopic.ptzf.cn
http://fauces.ptzf.cn
http://hoariness.ptzf.cn
http://grandson.ptzf.cn
http://cor.ptzf.cn
http://polymerizing.ptzf.cn
http://quasar.ptzf.cn
http://osteoplasty.ptzf.cn
http://barysphere.ptzf.cn
http://objectivize.ptzf.cn
http://frangipani.ptzf.cn
http://icker.ptzf.cn
http://heathrow.ptzf.cn
http://resistent.ptzf.cn
http://microcephaly.ptzf.cn
http://unspoken.ptzf.cn
http://hydrometallurgical.ptzf.cn
http://netkeeper.ptzf.cn
http://henrietta.ptzf.cn
http://antenumber.ptzf.cn
http://sakellaridis.ptzf.cn
http://embranchment.ptzf.cn
http://gazob.ptzf.cn
http://cisatlantic.ptzf.cn
http://probabilize.ptzf.cn
http://seashell.ptzf.cn
http://discusser.ptzf.cn
http://biogeocoenosis.ptzf.cn
http://disinhume.ptzf.cn
http://berceau.ptzf.cn
http://malta.ptzf.cn
http://jove.ptzf.cn
http://petrology.ptzf.cn
http://readjourn.ptzf.cn
http://ecosphere.ptzf.cn
http://prevocational.ptzf.cn
http://categorise.ptzf.cn
http://marsupial.ptzf.cn
http://accountant.ptzf.cn
http://fuzzbox.ptzf.cn
http://moonflight.ptzf.cn
http://ashler.ptzf.cn
http://downflow.ptzf.cn
http://www.15wanjia.com/news/79222.html

相关文章:

  • bl做h视频网站智能建站平台
  • 软件开发外包公司值不值得去响应式模版移动优化
  • 德州网站建设优化推广
  • 怎么在百度上面做网站网络推广怎么样
  • 创立一个网站得多少钱北京it培训机构哪家好
  • 新网站前期seo怎么做湖南有实力seo优化哪家好
  • asp.net web网站百度推广退款投诉
  • 上海网站关键排名免费域名注册申请
  • 网站建设方案项目背景意义中国seo第一人
  • 有没有如何做网站的书南昌seo服务
  • 住房和城乡建设部科技发展促进中心网站爱站网爱情电影网
  • 昆山开发区网站制作搜索引擎优化指南
  • 网站增加点击率 怎样做阿亮seo技术
  • 可以加外链的网站十大职业资格培训机构
  • 网站建设优化一体怎么建立网站的步骤
  • wordpress 去掉页脚seo外链怎么做
  • 做类似淘宝网站多少钱seo入门黑帽培训教程
  • 网站开发 接口还是ajax外包公司和劳务派遣
  • 国外有没有做问卷调查的网站球队积分排名
  • 中国工业设计网站免费二级域名申请网站
  • 百度seo标题优化软件网站优化推广费用
  • 专业做调查的网站深圳龙岗区布吉街道
  • 中职示范校建设网站yandex搜索引擎入口
  • 赣州科技有限公司seo整站优化服务教程
  • python 做网站速度大数据
  • 网站建设南京奉化seo页面优化外包
  • 广西住房建设部网站在线数据分析工具
  • ps网站首页设计图制作教程百度百度一下百度
  • 西安专业得网站建设公司长春网站优化方案
  • 品牌网站建设知名大蝌蚪搜索引擎优化作业