Pagini recente » Cod sursa (job #2127032) | Cod sursa (job #1965967) | Cod sursa (job #2957075) | Cod sursa (job #1820070) | Cod sursa (job #3325094)
#include <bits/stdc++.h>
using namespace std;
const string NUMEFISIER="sdo";
ifstream fin(NUMEFISIER+".in");
ofstream fout(NUMEFISIER+".out");
void part_3(int v[], int st, int dr, int& p1, int& p2){
int pivot=rand()%(dr-st+1)+st;
swap(v[pivot], v[dr]);
p1=st; p2=dr-1;
int i=st;
while(i<=p2)
{
if(v[i]==v[dr])
{
i++;
}
else if(v[i]<v[dr])
{
swap(v[p1++], v[i++]);
}
else swap(v[p2--], v[i]);
}
swap(v[++p2], v[dr]);
}
void quickSort(int v[], int st, int dr, int k)
{
if(st>=dr)
return;
int p1,p2;
///st->p1-1, mai mici ca pivotul
///p1->p2, egale cu pivotul
///p2+1->dr mai mari ca pivotul
part_3(v, st, dr, p1, p2);
if(k<p1)
quickSort(v, st, p1-1, k);
else if(k<=p2)
return;
else quickSort(v, p2+1, dr, k);
}
int main()
{
int n,k;
fin>>n>>k;
int* v=new int[n];
for(int i=0; i<n; i++) fin>>v[i];
quickSort(v, 0, n-1, k-1);
fout<<v[k-1];
delete[] v;
return 0;
}