Pagini recente » Rating Nita Andrei (andrei1058) | Istoria paginii utilizator/augustinu04 | Profil M@2Te4i | Cod sursa (job #2247208) | Cod sursa (job #1330709)
#include <fstream>
#include <stdlib.h>
#include <time.h>
#define DIM 500002
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N,v[DIM],k;
char s[4*DIM];
int part(int p,int u){
int x=p+rand()%(u-p+1);
swap(v[p],v[x]);
int i=p,j=u;
int ii=0,jj=-1;
while(i!=j){
if(v[i]>v[j]){
swap(v[i],v[j]);
swap(ii,jj);
ii*=-1;
jj*=-1;
}
i+=ii;
j+=jj;
}
return i;
}
void quicksort(int p,int u){
if(p>=u)
return;
int poz=part(p,u);
if(p<poz-1)
quicksort(p,poz-1);
if(u>poz+1)
quicksort(poz+1,u);
}
int main(){
fin>>N;
fin.get();
fin.get(s,6*DIM);
for(int i=0;s[i]!=0;i++)
if(s[i]>='0' && s[i]<='9'){
++k;
while(s[i]>='0' && s[i]<='9')
v[k]=v[k]*10+s[i]-'0',i++;
}
srand(time(0));
quicksort(1,N);
for(int i=1;i<=N;i++)
fout<<v[i]<<" ";
fin.close();fout.close();
return 0;
}