#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 是否倒序
r = False
# 下沉
def sink(a, i, n):
while i * 2 + 1 <= n:
j = i * 2 + 1
if j + 1 <= n and compare(a, j + 1, j):
j += 1
if compare(a, j, i):
swap(a, i, j)
i = j
else:
break
def compare(a, i, j):
return a[i] > a[j] if not r else a[i] < a[j]
def swap(a, i, j):
t = a[i]
a[i] = a[j]
a[j] = t
def init(a):
le = len(a)
ei = le - 1
si = le / 2 - 1
while si >= 0:
sink(a, si, ei)
si -= 1
def adjust(a):
ei = len(a) - 1
while ei > 0:
swap(a, 0, ei)
ei -= 1
sink(a, 0, ei)
def heap_sort(a):
init(a)
adjust(a)
print a
heap_sort([3, 1, 2, 5, 6, 9, 6, 0, 4, 0])
堆排序Python实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴...
- 代码自带解释,就不多赘述原理了... 💬 堆的向下调整性质; 💬 当根节点的左右子树都是堆时,可以通过一次向下的调...
- 前一阵子遇到一个问题,需要求x轴上的依次排开的一排矩形的最高的那条线,实际上就是所谓的“天际线问题”。当时为了解决...