Pagini recente » Cod sursa (job #3239759) | Cod sursa (job #3204164) | Cod sursa (job #706780) | Cod sursa (job #1286139) | Cod sursa (job #2083145)
#include<bits/stdc++.h>
using namespace std;
ifstream f("sdo.in");
ofstream g("sdo.out");
int n,k;
vector<long long>v(n+1);
int quicksort(int s,int d,int poz){
if (s==d) return v[s];
//pivot generat random, fiind medianul dintre 3 pivoturi random
int p1,p2,p3;
long long pivot=0;
p1=rand()%(d-s+1) +s;
p2=rand()%(d-s+1) +s;
p3=rand()%(d-s+1) +s;
if( (v[p1]-v[p2]>0 && v[p1]-v[p3]<0) ||(v[p1]-v[p2]<0 && v[p1]-v[p3]>0) ) pivot=v[p1];
else if( (v[p2]-v[p1]>0 && v[p2]-v[p3]<0) ||(v[p2]-v[p1]<0 && v[p2]-v[p3]>0) ) pivot=v[p2];
else pivot=v[p3];
//impartim vectorul in doua in functie de pivot
int i=s-1,j=d+1;
int poz_pivot;
while(i<j){
while(v[++i]<pivot);
while(v[--j]>pivot);
if(i>=j)
poz_pivot=j;
else
swap(v[i],v[j]);
}
//apelam recursiv functia pana cand vectorul e sortat
if(poz+s-1<=poz_pivot)
return quicksort(s,poz_pivot,poz);
else
return quicksort(poz_pivot+1,d, poz-poz_pivot+s-1);
}
int main(){
srand(time(NULL));//pentru qsort
f>>n>>k;
for(int i=1;i<=n;++i)
f>>v[i];
g<<quicksort(1,n,k);
return 0;
}