#!/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軸上的依次排開的一排矩形的最高的那條線,實際上就是所謂的“天際線問題”。當時為了解決...