Pagini recente » Rating adelina seserman (adi_ses) | Cod sursa (job #1231644) | Otilia | Cod sursa (job #505590) | Cod sursa (job #893630)
Cod sursa(job #893630)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define DIM 500010
FILE *fin=fopen("algsort.in","r");
FILE *fout=fopen("algsort.out","w");
int v[DIM], n, a[DIM];
int poz(int p, int u){
int i,j,ii,jj,aux,x;
i=p; j=u;
ii = 0;
jj = -1;
x = p + rand()%(u-p+1);
aux = v[p];
v[p]=v[x];
v[x]=aux;
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 qsort(int p , int u){
int m;
if(p<u){
m = poz(p,u);
qsort(p,m-1);
qsort(m+1,u);
}
}
void interclasare(int p, int u, int m){ // merge_sort
int nr = p-1;
int i,j;
for(i = p, j = m+1 ; i<=m && j<=u; ){
if(v[i]<v[j]){
a[++nr]=v[i++];
}
else{
a[++nr]=v[j++];
}
}
for(; i<=m; i++){
a[++nr]=v[i];
}
for(; j<=u; j++){
a[++nr]=v[j];
}
for(i = p; i<=u; i++){
v[i]=a[i];
}
}
void merge_sort(int p , int u ){
if(u-p>=1){
int m = (p+u)/2;
merge_sort(p,m);
merge_sort(m+1,u);
interclasare(p,u,m);
}
}
int main(){
srand( time(0) );
fscanf(fin,"%d",&n);
for(int i = 1; i <= n; i++){
fscanf(fin,"%d",&v[i]);
}
qsort(1,n);
for(int i = 1; i<=n; i++){
fprintf(fout, "%d ", v[i]);
}
return 0;
}