您的位置:首页 > 理论基础 > 数据结构算法

用python实现数据结构中的堆

2018-01-29 00:00 204 查看
sortCommon.py

#!/usr/bin/python
def swap(dataArray, i, j):
temp = dataArray[i]
dataArray[i] = dataArray[j]
dataArray[j] = temp

heap.py

from sortCommon import swap
class Heap(object):
def __init__(self):
self.queue = []
#上浮
def shiftUp(self, i):
while(int(i/2)>=0):
if self.queue[i] < self.queue[int(i/2)]:
swap(self.queue, i, int(i/2))
i = int(i/2)
else:break
#下沉
def shiftDown(self, i):
size = len(self.queue)
while(int(i*2+1)<size):
t = int(i*2+1)
if t+1 < size and self.queue[t+1] < self.queue[t]:
t+=1
if self.queue[i] > self.queue[t]:
swap(self.queue, i, t)
i = t
else:break
def push(self, x):
self.queue.append(x)
self.shiftUp(len(self.queue)-1)
print(self.queue)
def pop(self):
swap(self.queue,0,len(self.queue)-1)
del self.queue[len(self.queue)-1]
self.shiftDown(0)
print(self.queue)
def top(self):
return self.queue[0]
def empty(self):
return len(self.queue) == 0
if __name__ == '__main__':
heap = Heap()
size = int(input('请输入堆的节点数:'))
for i in range(size):
num = int(input('请输入一个数字:'))
heap.push(num)
print('从上到下输出堆顶元素')
for i in range(size):
print(heap.top())
heap.pop()

参考链接:

https://www.cnblogs.com/JVxie/p/4859889.html

不过这个链接中的下沉方法中似乎有些错误,因为它的例子是实现小端堆,所以应该是把大的数字往下沉,所以在Shift_downy方法中的

if( 堆数组名[ i ] < 堆数组名[ T ] )

应该改为

if( 堆数组名[ i ] > 堆数组名[ T ] )
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python