美文网首页
Python 排序算法之堆排序(6/8)

Python 排序算法之堆排序(6/8)

作者: Paycation | 来源:发表于2018-05-13 23:02 被阅读44次

先放在这里后面再来详解

概念

大顶堆(最大堆):要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值。
最小堆则正好相反。

def heap_sort(lst):
    def sift_down(start, end):
        """最大堆调整"""
        root = start
        while True:
            child = 2 * root + 1
            if child > end:
                break
            if child + 1 <= end and lst[child] < lst[child + 1]: # right child 大
                child += 1 # child 的含义变为 right child 的位置
            if lst[root] < lst[child]: # root 小于任意一个 child
                lst[root], lst[child] = lst[child], lst[root] # swap
                root = child # 
            else:
                break

    # 创建最大堆
    for start in range((len(lst) - 2) // 2, -1, -1):
        sift_down(start, len(lst) - 1)

    # 堆排序
    for end in range(len(lst) - 1, 0, -1):
        lst[0], lst[end] = lst[end], lst[0]
        sift_down(0, end - 1)
    return lst

相关文章

  • Python 排序算法之堆排序(6/8)

    先放在这里后面再来详解 概念 大顶堆(最大堆):要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树...

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • python实现堆排序(HeapSort)

    python实现【堆排序】(HeapSort) 算法原理及介绍 堆排序(Heapsort)是指利用堆这种数据结构所...

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • 3.11 堆的概念及堆排序思路

    Chapter3: 更好的查找与排序算法 11. 堆的概念及堆排序 [1] 图解排序算法(三)之堆排序 讲得很好,...

  • 3.2-选择排序-堆排序

    参考链接 选择排序:堆排序(Heap Sort) 白话经典算法系列之七 堆与堆排序 堆排序与快速排序,归并排序一样...

  • 2018-06-30

    排序算法之堆排序 堆排序是利用堆的数据结构而设计的一种排序算法,堆排序是一种选择排序。可以利用数组的特点快速定位制...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • 排序学习 - 为了面对算法面试(4)

    排序学习 - 为了面对算法面试(3) -快速排序 6.堆排序: 堆排序是利用堆的性质进行的一种选择排序方法原理:1...

网友评论

      本文标题:Python 排序算法之堆排序(6/8)

      本文链接:https://www.haomeiwen.com/subject/mqkrdftx.html