Cod sursa(job #315508)

Utilizator andrici_cezarAndrici Cezar andrici_cezar Data 16 mai 2009 08:39:17
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
#include<stdio.h>
#include<string.h>

FILE *f,*g;

long i,n,a[500001],aux,poz,ok;
char q[2],s[1000000];

void part(long st, long dr, long &m){
long p,aux;
long s,d;
p=a[st];
s=st;
d=dr;
while(s<d){
while(s<=dr&&a[s]<=p) s++;
while(d>=st&&a[d]>p) d--;
if(s<d){
aux=a[s];
a[s]=a[d];
a[d]=aux;
}
}
m=d;
aux=a[st];
a[st]=a[m];
a[m]=aux;
}
void quick(long st, long dr){
long m;
if(dr>st){
part(st,dr,m);
if(st<m-1) quick(st,m-1);
if(m+1<dr) quick(m+1,dr);
}
}
int main()
{
f=fopen("algsort.in","rt");
g=fopen("algsort.out","wt");
fscanf(f,"%ld",&n);
fgets(q,2,f);
fgets(s,1000000,f);

aux=0;
ok=0;
for (i=0;s[i]!='\n';++i)
    {
    if(s[i]==' '){ a[++poz]=aux;aux=0;if (ok==1) a[poz]*=-1; ok=0;}
    else if (s[i]=='-')ok=1;
               else if (s[i]!='\n'&&s[i]!=' '&&s[i]!='\x0')aux=aux*10+s[i]-'0';
    if (s[i]=='\x0') break;
    }
a[++poz]=aux;
if (ok==1) a[poz]*=-1;

quick(1,n);
for (i=1;i<=n;i++)
    fprintf(g,"%ld ",a[i]);
fprintf(g,"\n",a[i]);
fclose(g);
return 0;
}