Pagini recente » Cod sursa (job #999978) | Cod sursa (job #2238575) | Cod sursa (job #2553189) | Cod sursa (job #2364075) | Cod sursa (job #572917)
Cod sursa(job #572917)
#include <stdio.h>
#include <fstream.h>
#define DIM 500001
ifstream f("algsort.in");
FILE *g=fopen("algsort.out","w");
int n;
int v[DIM],b[DIM];
int ii=0,jj=-1,aux;
long pos(long i,long j){
ii=0,jj=-1;
while(i!=j){
if(v[i]>v[j]){
aux=v[i];
v[i]=v[j];
v[j]=aux;
aux=ii;
ii=-jj;
jj=-aux;
}
i+=ii;
j+=jj;
}
return i;
}
void quick(long p,long u){
if(p<u){
long k=pos(p,u);
quick(p,k-1);
quick(k+1,u);
}
}
void interclas(int p,int m,int u){
register int i=p,j=m+1;
int q=p-1;
while(i<=m && j<=u)
if(v[i]<v[j])
b[++q]=v[i++];
else
b[++q]=v[j++];
for(;i<=m;)
b[++q]=v[i++];
for(;j<=u;){
b[++q]=v[j++];
}
for(i=p;i<=u;i++){
v[i]=b[i];
}
}
void merge(int p,int u){
if(p<u){
int m=(p+u)/2;
merge(p,m);
merge(m+1,u);
interclas(p,m,u);
}
}
int main(void){
register int i;
f>>n;
for(i=1;i<=n;i++){
f>>v[i];
}
//quick(1,n);
merge(1,n);
for(i=1;i<=n;i++){
fprintf(g,"%ld ",v[i]);
}
f.close();
fclose(g);
return 0;
}