python实现的堆排序算法代码
- 作者: 深情不及久伴red
- 来源: 51数据库
- 2022-08-12
python实现的堆排序算法代码
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,0,1,3,11,35,68]
heapSort(a)
print a # [-8, 0, 1, 3, 11, 35, 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, i, 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, i, 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, 0, end)
siftdown(a, 0, end)
end -= 1
推荐阅读
热点文章
Discord.py(重写)on_member_update 无法正常工作
0
Discord.py 在 vc 中获取用户分钟数
0
discord.py 重写 |为我的命令出错
0
Discord.py rewrite 如何 DM 命令?
0
播放音频时,最后一部分被切断.如何解决这个问题?(discord.py)
0
在消息删除消息 Discord.py
0
如何使 discord.py 机器人私人/直接消息不是作者的人?
0
(Discord.py) 如何获取整个嵌入内容?
0
Discord bot 尽管获得了许可,但不能提及所有人
0
Discord.py discord.NotFound 异常
0
