5.查找最小的 k 个元素
题目:输入 n 个整数,输出其中最小的 k 个。
题目:输入 n 个整数,输出其中最小的 k 个。
例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。
基本思路:
使用堆排序基本思想,对堆排序做小小修改,在堆排序的算法中增加一个变量k,表示只需要最小的k个数。
那么意味着在最初的小根堆建立起来的基础上,进行k次的堆顶值转移至数组尾部。
在第k次退出,在数组的尾部就会出现k个最小数的组成的递减序列了,从尾部开始打印数组k个数就可以了。
时间复杂度分析:
n + k * log(n)
复习:
堆排序的基本思路:
1)首先建立最初的小根堆
需要从堆的第一个非叶子结点开始到根节点进行堆调整,那么得到最初的小根堆
得到小根堆的结果仅仅是最小的值在堆顶
2)每次将小根堆的堆顶最小值放入数组的后面,
即每次让堆顶值与数组尾部交换,在数组尾部形成一个倒序的有序序列,得到的结果是第一小值放在倒数第一的位置,而第k小的放在倒数第k位置
3)每次交换后,前面n-1个结点就不符合小根堆的要求了,需要调整
代码:
{CSDN:CODE:305758}
结果: