#include <bits/stdc++.h>
using namespace std;
static int hit=0;
int partition(vector<int> &a, int l, int r){
srand(time(NULL));
int idx = l + rand() % (r - l + 1);
swap(a[l], a[idx]);
int i = l, j = i+1;
while(j <= r){
if(a[j] < a[l])
swap(a[++i], a[j]);
++j;
}
if(i ^ l)
swap(a[l], a[i]);
return i;
}
void quickSrt(vector<int> &a, int l, int r, int &k){
if(l < r){
int i = partition(a, l, r);
if(i > k-1)
quickSrt(a, l, i-1, k);
else if(i < k-1)
quickSrt(a, i+1, r, k);
else
return;
}
}
int main() {
vector<int> arr = {42,10,23,5,12,9,3,1,2,35};
int k = 6; /* 1 2 3 5 9 10 12 23 35 42 */
quickSrt(arr, 0, arr.size()-1, k);
cout<<k<<"th largest element: "<<arr[k-1]<<"\n";
for(auto val: arr)
cout<<val<<" ";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnN0YXRpYyBpbnQgaGl0PTA7CgppbnQgcGFydGl0aW9uKHZlY3RvcjxpbnQ+ICZhLCBpbnQgbCwgaW50IHIpewoJCglzcmFuZCh0aW1lKE5VTEwpKTsKCWludCBpZHggPSBsICsgcmFuZCgpICUgKHIgLSBsICsgMSk7CgkKCXN3YXAoYVtsXSwgYVtpZHhdKTsKCQoJaW50IGkgPSBsLCBqID0gaSsxOwoJCgl3aGlsZShqIDw9IHIpewoJCWlmKGFbal0gPCBhW2xdKQoJCQlzd2FwKGFbKytpXSwgYVtqXSk7CgkJKytqOwoJfQoJCglpZihpIF4gbCkKCQlzd2FwKGFbbF0sIGFbaV0pOwoJCglyZXR1cm4gaTsKfQoKdm9pZCBxdWlja1NydCh2ZWN0b3I8aW50PiAmYSwgaW50IGwsIGludCByLCBpbnQgJmspewoJCglpZihsIDwgcil7CgkJaW50IGkgPSBwYXJ0aXRpb24oYSwgbCwgcik7CgkJCgkJaWYoaSA+IGstMSkKCQkJcXVpY2tTcnQoYSwgbCwgaS0xLCBrKTsKCQllbHNlIGlmKGkgPCBrLTEpCgkJCXF1aWNrU3J0KGEsIGkrMSwgciwgayk7CgkJZWxzZQoJCQlyZXR1cm47Cgl9Cn0KCmludCBtYWluKCkgewoJdmVjdG9yPGludD4gYXJyID0gezQyLDEwLDIzLDUsMTIsOSwzLDEsMiwzNX07CglpbnQgayA9IDY7IC8qIDEgMiAzIDUgOSAxMCAxMiAyMyAzNSA0MiAqLwoJCglxdWlja1NydChhcnIsIDAsIGFyci5zaXplKCktMSwgayk7CgkKCWNvdXQ8PGs8PCJ0aCBsYXJnZXN0IGVsZW1lbnQ6ICI8PGFycltrLTFdPDwiXG4iOwoJCglmb3IoYXV0byB2YWw6IGFycikKCWNvdXQ8PHZhbDw8IiAiOwoJCglyZXR1cm4gMDsKfQ==