Pagini recente » Cod sursa (job #1315330) | Cod sursa (job #1906420) | Cod sursa (job #3209340) | Cod sursa (job #879960) | Cod sursa (job #857884)
Cod sursa(job #857884)
#include <fstream>
#include <ctime>
#include <cstdlib>
using namespace std;
int *vector_citit;
int partitionare(int stanga,int dreapta)
{
int pivot = vector_citit[stanga + rand()%(dreapta - stanga +1)];
if(stanga >= dreapta)
return 0;
do
{
while(vector_citit[stanga] < pivot)
++stanga;
while(vector_citit[dreapta] > pivot)
--dreapta;
if(stanga < dreapta)
{swap(vector_citit[stanga],vector_citit[dreapta]);
++stanga;
--dreapta;}
else
return dreapta;
}
while(stanga < dreapta);
return 0;
}
void selecteaza(int stanga,int dreapta,int k)
{
if(stanga == dreapta)
return;
int poz = partitionare(stanga, dreapta), poz_ult = poz-stanga+1;
if(poz_ult >= k)
selecteaza(stanga,poz,k);
else
selecteaza(++stanga,dreapta,k-poz_ult);
}
int main()
{
srand(time(NULL));
int n,k;
ifstream f("sdo.in");
f >> n >> k;
vector_citit = new int[n];
--n;
for(int i=0;i<=n;++i)
f>>vector_citit[i];
f.close();
selecteaza(0,n,k);
ofstream g("sdo.out");
g<<vector_citit[k];
g.close();
return 0;
}