排序算法 (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.堆排序)的主要内容,如果未能解决你的问题,请参考以下文章