堆排序
堆:n个关键字序列L[1…n]称为堆,当且仅当该序列满足:(1<=i<=(n/2)(取下界))
1)若L(i)<=L(2i)且L(i)<=L(2i+1),则称该堆为小根堆
2)若L(i)>=L(2i)且L(i)>=L(2i+1),则称该堆为大根堆
在排序过程中将L[1…n]视为一棵完全二叉树的顺序存储结构
堆的初始化(以大根堆为例):
堆排序(不稳定的算法):不断的输出栈顶元素,并向下调整【时间复杂度为O(nlog2(n))】【空间复杂度为O(1)】
适用于顺序存储(链式存储)
堆的插入:将新结点放置在末端然后进行向上调整