#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