查找最小的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 }

 

posted on 2013-04-15 16:15  blue firmament  阅读(130)  评论(0编辑  收藏  举报