查找最小的k个元素
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
题目地址:http://blog.csdn.net/v_july_v/article/details/5934051
View Code
1 #include <iostream> 2 #include <vector> 3 #include <ctime> 4 #include <random> 5 #include <algorithm> 6 7 using namespace std; 8 9 10 /************************************************* 11 Function: // print_nmin 12 Description: // 输出数组的最小前n个数 13 Input: // array: 数组 14 // num: 数组大小 15 // mim_num: 最小输出数目 16 Return: // 无 17 *************************************************/ 18 void print_nmin(int *array, int num, int mim_num) 19 { 20 int i, j; 21 vector<int> vect; 22 if(NULL == array) 23 { 24 return; 25 } 26 if (mim_num >= num) 27 { 28 for (i = 0; i < num; ++i) 29 { 30 cout << array[i] << " "; 31 } 32 cout << endl; 33 } 34 else 35 { 36 vector<int>::iterator it; 37 38 vect.push_back(array[0]); 39 for(i = 1, j = 1; i < num; ++i) 40 { 41 it = find(vect.begin(), vect.end(), array[i]); 42 if (it == vect.end()) 43 { 44 vect.push_back(array[i]); 45 j++; 46 } 47 if(j == mim_num) 48 { 49 break; 50 } 51 } 52 sort(vect.begin(), vect.end()); 53 while(i < num) 54 { 55 if ((it = find(vect.begin(), vect.end(), array[i])) == vect.end()) 56 { 57 int temp; 58 j = vect.size() - 1; 59 if(array[i] < vect[j]) 60 { 61 vect[j] = array[i]; 62 sort(vect.begin(), vect.end()); 63 } 64 } 65 i++; 66 } 67 for(i = 0; i < vect.size(); ++i) 68 { 69 cout << vect[i] << " "; 70 } 71 cout << endl; 72 } 73 } 74 75 void main() 76 { 77 srand(time(0)); 78 int a[20]; 79 int i; 80 for(i = 0; i < 20; i++) 81 { 82 a[i] = rand() % 100; 83 } 84 for (i = 0; i < 20; ++i) 85 { 86 cout << a[i] << " "; 87 } 88 cout << endl; 89 print_nmin(a, 20, 4); 90 }