
#include <iostream>
#include <cmath>
#include <vector>
#include <ctime>
#include <time.h>
#include <stdlib.h>
using namespace std;
class Solution {
public:
int selection(vector<int>& s, int k) {
//srand((unsigned)time(0));
//int v = rand() % (s.size());
int v = s[0];
vector<int> left, mid, right;
for (int i = 0; i < s.size(); i++) {
if (s[i] < v)
left.push_back(s[i]);
else if (s[i] == v)
mid.push_back(s[i]);
else
right.push_back(s[i]);
}
if (k <= left.size())
return selection(left, k);
else if (k > left.size() && k <= left.size()+mid.size())
return v;
else
return selection(right, k-left.size()-mid.size());
}
};
int main() {
Solution s;
int arr[11] = {2,36,5,21,8,13,11,20,5,4,1};
vector<int> v(arr, arr+11);
cout << s.selection(v,11) << endl;
return 0;
}
selection problem-divide and conquer
原文:http://www.cnblogs.com/pxy7896/p/6517355.html