Pagini recente » Cod sursa (job #827850) | Cod sursa (job #1708838) | Cod sursa (job #1565096) | Cod sursa (job #2452450) | Cod sursa (job #2296141)
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
int v[3000001];
int partitie(int v[],int st,int dr)
{
int i,j,pivot=v[rand()%(dr-st+1)+st];
//alegerea pivotului aleatoriu prin rand()%
i=st;
j=dr;
while(1)
{
while(v[i]<pivot) //crestem i, cat timp avem v[i]<pivot
{
i++;
}
while(pivot<v[j])//scadem j, cat timp avem v[j]>pivot
{
j--;
}
if(i<j)
{
swap(v[i],v[j]);//interschimbam v[i] si v[[j] daca i<j
}
else
{
return j;//returnam j in caz contrar
}
}
return 0;
}
void QuickSort(int v[],int k,int st, int dr)
{
if(st==dr)
{
return;
}
int a,b;
a=partitie(v,st,dr);//realizarea unei partitii de la st la dr
b=a-st+1;
if(b>=k)
{
QuickSort(v,k,st,a);//apeleraea pentru prima jumatae
}
else
{
QuickSort(v,k-b,a+1,dr);//apelarea pentru a doua jumatate
}
}
int main()
{
srand(time(NULL));
int n,i,k;
ifstream fin("sdo.in");
ofstream fout("sdo.out");
fin>>n>>k; //citirea dimensiunii si a lui, pentru a k-a statistica de ordine
for(i=1;i<=n;i++)
{
fin>>v[i];//citirea vectorului
}
QuickSort(v,k,1,n);
fout<<v[k];//afisarea celui de-al k element
fin.close();
fout.close();
return 0;
}