题目描述:数组里面有n个整数,请找出其中最小的k个数,要求时间复杂度尽可能低。
解法一:全部排序:
先对这个序列快速排序,再输出前k个元素。时间复杂度为O(nlogn)+O(k);
#include <iostream>
#include <algorithm>
using namespace std;
void SortFindK(int *nums, int k){
sort(nums, nums+100);
int i;
for(i = 0; i < k; ++i)
cout << nums[i] << " ";
cout << endl;
}
int main(){
int k, nums[100] = {29,-24,62,7,-30,88,75,10,24,17,-58,-40,-6,-54,69,-61,-55,
-66,-54,-13,-38,85,-14,-63,81,96,-12,-78,-48,-18,19,-48,21,42,-56,-77,
-41,-36,-15,2,-83,-48,60,-94,86,46,-2,16,-53,-8,93,9,4,-54,-2,25,36,
-21,-27,98,-92,77,83,59,-80,-48,-33,36,-73,44,-79,31,-1,56,43,81,
78,-33,40,-60,-94,49,0,-4,81,22,24,72,61,15,-63,-5