首页 > 其他 > 详细

selection problem-divide and conquer

时间:2017-03-08 00:53:00      阅读:138      评论:0      收藏:0      [点我收藏+]

技术分享

 

#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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!