堆的数据结构和堆排序算法
关于二叉树
二叉树的特点:
二叉树是一种存储数据元素的汇集数据结构。
二叉树最重要的性质就是树的高度和树中可以容纳的最大结点个数之间的关系。树的高度类似于表长,是从根结点到其他结点的最大距离。在长为n的表里只能容纳n个结点,而在高为h的二叉树中则可以容纳大约2^h个结点,这是表和树的最大不同点。
一般的元素插入,如果是按线性顺序排列的,那么操作必然需要O(n)的时间(需要对n个数据进行移位处理),要突破这个限制,必须考虑其他数据结构的组织方式。二叉树就是一种高效插入的存储方式。
堆排序利用的是完全二叉树。
python实现堆排序:
1.堆的建立:
class Heap():
#初始化生成一个优先队列堆
def __init__(self, elist=[]):
self._elems = list(elist)
#初始化时,对数据进行排序
if elist:
self.buildheap()
def buildheap(self):
end = len(self._elems)
#所有非叶节点,从后向前进行筛选排序
for i in range(end//2, -1, -1):
self.siftdown(self._elems[i], i, end)
#向下筛选,使堆按顺序排列