#!/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轴上的依次排开的一排矩形的最高的那条线,实际上就是所谓的“天际线问题”。当时为了解决...