寻找最小的K个数
题目描述:查找最小的K个数
题目:输入n个整数,输出其中最小的K个数
例如,输入1、2、3、4、5、6、7、8这8个数字,则最小的4个数字为1、2、3、4。
第一节、各种思路,各种选择
这个时候,想到了选择或交换排序,即遍历n个数,先把最先遍历到的K个数存入大小为k的数组之中,对这k个数,利用选择或交换排序,找到k个数中的最大数Kmax(Kmax为这K个元素的数组中最大的元素),用时间为O(k)(你应该知道,插入或选择排序查找操作需要O(k)的时间),后再继续遍历后n-k个数,x与Kmax比较:如果x< Kmax,则x代替Kmax,并再次重新找出K个元素的数组中的最大元素Kmax‘;如果x>Kmax,则不更新数组。这样每次更新和不更新数组所用的时间为O(k)或O(0),整趟下来,总的时间复杂度平均下来为:n*O(k) = O(n*k);——方法二
上面的这些思路来自:http://blog.csdn.net/v_JULY_v
非常感谢作者,提高了这么多思路。
原文地址:http://www.cnblogs.com/wft1990/p/7010817.html