堆的应用(堆排序,TopK问题)

堆的应用

1)排序 堆排序

选择排序
既可以找到最大的放在最后
也可以找到最小的方最前

但是,堆排序不能找最小的放在最前
因为把最小数放在最前,会破坏掉堆的原来的顺序,除非重新建堆

1, 2,9,16,7,15,18,45,37,63,13

63,45,18,16,37,9,2,7,15,13,1

1,45,18,16,37,9,2,7,15,13, 63 再向下调整即可

堆排序:

				排升序,建大堆
				排降序,建小堆
				原因:重新调整回根的成本更小,向下调整(O(logn))<建队O(n)

伪代码

	int   array[]   int size;堆排序,排升序
	建大堆
	i=0;i的意义是被选出的最大的数的个数
	for(i

堆的应用(堆排序,TopK问题)_第1张图片

建堆函数
堆的应用(堆排序,TopK问题)_第2张图片
向下调整函数
堆的应用(堆排序,TopK问题)_第3张图片

TopK问题

再海量数据中(n>>100*1000),找最大的k=10个数
建小堆
堆的应用(堆排序,TopK问题)_第4张图片

你可能感兴趣的:(数据结构与算法)