#include <iostream>
#include <time.h>
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
#include <assert.h>
using namespace std;
int Pivot2(vector<int> &v, int pivot) {
vector<int> v_copy(v.size());
//int pivot = v.size() / 2;
//1. Sort the array about the mid term
int count_less = 0;
int j = 0;
for (unsigned int i = 0; i <v.size() ; i++) {
if (v[i]< v[pivot]) {
v_copy[j]=v[i];
j++;
count_less++;
}
}
v_copy[j]=v[pivot];
j++;
for (unsigned int i = 0; i <v.size(); i++) {
if (v[i]> v[pivot]) {
v_copy[j] = v[i];
j++;
}
}
//2. if the number of less than than tmp_med increase the middle postion
if ( count_less > v.size() / 2) {
Pivot2(v_copy,count_less-1);
}
else if (count_less == v.size() / 2) {
cout <<"inner " << v[pivot] <<endl ;
return v[pivot]; //Why the recursion does not terminate with this return?
}
else {
if ( count_less < v.size() / 2) {
Pivot2(v_copy, count_less + 1 );
}
}
}
int main() {
// your code goes here
int arr[] = { 8, 7, 3, 1, 9, 4, 6, 5, 2};
int n = sizeof(arr) / sizeof(arr[0]);
//randomize(arr, n);
vector<int> v( begin(arr), end(arr) );
int med1 = Pivot2(v,v.size()/2);
assert(5 == med1);
cout << med1 <<endl ;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxjc3RkaW8+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGFzc2VydC5oPiAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKaW50IFBpdm90Mih2ZWN0b3I8aW50PiAmdiwgaW50IHBpdm90KSB7CgoJdmVjdG9yPGludD4gdl9jb3B5KHYuc2l6ZSgpKTsgCgkvL2ludCBwaXZvdCA9IHYuc2l6ZSgpIC8gMjsgCgkvLzEuIFNvcnQgdGhlIGFycmF5IGFib3V0IHRoZSBtaWQgdGVybSAgCglpbnQgY291bnRfbGVzcyA9IDA7IAoJaW50IGogPSAwOyAKCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDx2LnNpemUoKSA7IGkrKykgewoKCQlpZiAodltpXTwgdltwaXZvdF0pIHsKCQkJdl9jb3B5W2pdPXZbaV07IAoJCQlqKys7IAoJCQljb3VudF9sZXNzKys7IAoJCX0KCX0KCgl2X2NvcHlbal09dltwaXZvdF07CglqKys7IAoJCglmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8di5zaXplKCk7IGkrKykgewoKCQlpZiAodltpXT4gdltwaXZvdF0pIHsKCQkJdl9jb3B5W2pdID0gdltpXTsKCQkJaisrOyAKCQl9Cgl9CgoJLy8yLiAgaWYgdGhlIG51bWJlciBvZiBsZXNzIHRoYW4gIHRoYW4gdG1wX21lZCBpbmNyZWFzZSB0aGUgbWlkZGxlIHBvc3Rpb24gCglpZiAoIGNvdW50X2xlc3MgPiAgdi5zaXplKCkgLyAyKSB7CgkJUGl2b3QyKHZfY29weSxjb3VudF9sZXNzLTEpOwoJfQoJZWxzZSBpZiAoY291bnRfbGVzcyA9PSAgdi5zaXplKCkgLyAyKSB7CgkJY291dCA8PCJpbm5lciAiIDw8ICB2W3Bpdm90XSA8PGVuZGwgOyAKCQlyZXR1cm4gdltwaXZvdF07IC8vV2h5IHRoZSByZWN1cnNpb24gZG9lcyBub3QgdGVybWluYXRlIHdpdGggdGhpcyByZXR1cm4/Cgl9CgllbHNlIHsKCSAgICBpZiAoIGNvdW50X2xlc3MgPCB2LnNpemUoKSAvIDIpIHsKCQkJUGl2b3QyKHZfY29weSwgY291bnRfbGVzcyArIDEgKTsKCQl9Cgl9CgoKCn0KCgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCWludCBhcnJbXSA9IHsgOCwgNywgMywgMSwgOSwgNCwgNiwgNSwgMn07CglpbnQgbiA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7IAoJLy9yYW5kb21pemUoYXJyLCBuKTsKCXZlY3RvcjxpbnQ+IHYoIGJlZ2luKGFyciksIGVuZChhcnIpICk7CgoJaW50IG1lZDEgPSBQaXZvdDIodix2LnNpemUoKS8yKTsKCWFzc2VydCg1ID09IG1lZDEpOwoJY291dCA8PCBtZWQxIDw8ZW5kbCA7IAoJcmV0dXJuIDA7Cn0=