堆排序


# 堆排序的向下调整性
# 排序步骤:建堆 交换堆顶元素和最后一个元素 调整使堆重新有序 i的指向前移(i指向最后一个元素)重复2以后的步骤
# 交换步骤将堆中的最大元素移动到了堆的最后位置,排序完成后,得到的是一个升序序列
# 大根堆的排序
# 向下调整
def sift(li,low,high):
	"""
	:param li:调整的列表
	:param low:调整的堆的堆顶元素的位置
	:param high:调整的堆的最后一个叶子节点的位置
	:return 
	"""
	i = low
	j = 2 * i + 1
	tmp = li[i]
	while j<=high:
		# 判断左右两节点,哪个更大,大的为j
		j = j+1 if jli[j] else j
		# 判断i和j哪个大,大的放到i的位置,i指向当前j的位置,j指向新的i的下一层
		if tmp


堆排序思路可参见: