排序算法 (08.堆排序)

Posted jackson1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法 (08.堆排序)相关的知识,希望对你有一定的参考价值。

什么是堆

1.所有 父节点 的值 都大于 (小于)子节点 的 值
2.属于完全 二叉树

堆排序思路

1.先定义一个调整堆的函数, 保证以 某点为 父节点进行调整, 并且保证 不 打乱 
子节点 以下的 子树的 堆结构 , 所以 用到 递归思想
2.从头遍历 到 树尾, 先进行 首尾交换, 再进行 构建 堆

代码实现


# 堆调整:
def heapify(tree, n, i):
    if i >= n:
        return
    max = i
    c1 = 2*i + 1
    c2 = 2*i + 2
    if tree[c1] and tree[c1] > tree[max]:
        max = c1
    if tree[c2] and tree[c2] > tree[max]:
        max = c2
    if max != i :
        #交换两个值
        tree[max], tree[i] = tree[i], tree[max]
        heapify(tree , n, max)

#build堆
def build_heap(tree, n):
    i = (n - 1) / 2
    while i >= 0:
        heapify(tree, n, i)
        i -= 1
#堆排序
def heap(tree, n):
    for i in range(0, n):
        tree[n-1],tree[0] = tree[0],tree[n-1]
        build_heap(tree, n-1)

以上是关于排序算法 (08.堆排序)的主要内容,如果未能解决你的问题,请参考以下文章

排序算法 (08.堆排序)

选择排序(简单选择排序堆排序的算法思想及代码实现)

7.2堆排序的代码分析(算法基础—排序算法)

数据结构-排序内部排序

数据结构-排序内部排序

07堆排序 python