Pagini recente » Cod sursa (job #1610976) | Istoria paginii runda/baftaa/clasament | Cod sursa (job #2798764) | Cod sursa (job #2948432) | Cod sursa (job #1229412)
#include <stdio.h>
#define MAX 500010
#define FIN "algsort.in"
#define FOUT "algsort.out"
int vec[ MAX ],
n;
void read();
void sort();
int divimp(int,int);
void mergesort(int,int,int);
void write();
int main() {
read();
sort();
write();
return 0;
}
void read() {
int i;
freopen(FIN, "r", stdin);
scanf("%d", &n);
for(i = 0; i < n; i++) {
scanf("%d", &vec[ i ]);
}
fclose( stdin );
};
void sort() {
divimp(0, n-1);
};
void mergesort(li, middle, ls) {
int i, j, k, c[ MAX ], p;
k = 0;
i = li;
j = middle + 1;
while(i<= middle && j <= ls) {
if(vec[i] < vec[j]) {
c[ k++ ] = vec[ i++ ];
} else {
c[ k++ ] = vec[ j++ ];
}
}
if( i<= middle) {
for( p = i; p <= middle; p++) {
c[ k++ ] = vec[ p ];
}
} else {
for( p = j; p <= ls; p++) {
c[ k++ ] = vec[ p ];
}
}
k = 0;
for(i = li; i <= ls; i++) {
vec[ i ] = c[ k++ ];
}
};
int divimp(int li, int ls) {
int middle;
if(li == ls) return vec[ li ];
else {
middle = (li+ls)/2;
divimp(li, middle);
divimp(middle + 1, ls);
mergesort(li, middle, ls);
}
}
void write() {
int i;
freopen(FOUT, "w", stdout);
for(i = 0; i < n; i++) {
printf("%d ", vec[ i ]);
}
fclose(stdout);
};