python实现的堆排序算法代码
发布时间:2020-12-17 17:16:34 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 def heapSort(a): def sift(start,count): root = start while root * 2 + 1 count: child = root * 2 + 1 if child count - 1 and a[child] a[child
|
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 def heapSort(a):
def sift(start,count):
root = start
while root * 2 + 1 < count:
child = root * 2 + 1
if child < count - 1 and a[child] < a[child + 1]:
child += 1
if a[root] < a[child]:
a[root],a[child] = a[child],a[root]
root = child
else:
return
count = len(a)
start = count / 2 - 1
end = count - 1
while start >= 0:
sift(start,count)
start -= 1
while end > 0:
a[end],a[0] = a[0],a[end]
sift(0,end)
end -= 1
a = [-8,1,3,11,35,68]
heapSort(a)
print a # [-8,68]
Recursive?sift(and?more?readable?IMHO)?Version: def heapsort(a):
def swap(a,i,j):
tmp = a[i]
a[i] = a[j]
a[j] = tmp
def siftdown(a,size):
l = 2*i+1
r = 2*i+2
largest = i
if l <= size-1 and a[l] > a[i]:
largest = l
if r <= size-1 and a[r] > a[largest]:
largest = r
if largest != i:
swap(a,largest)
siftdown(a,largest,size)
def heapify(a,size):
p = (size/2)-1
while p>=0:
siftdown(a,p,size)
p -= 1
size = len(a)
heapify(a,size)
end = size-1
while(end > 0):
swap(a,end)
siftdown(a,end)
end -= 1
以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
