Pagini recente » Cod sursa (job #1405535) | Cod sursa (job #655920) | Cod sursa (job #439473) | Cod sursa (job #2879502) | Cod sursa (job #2664783)
#include <stdio.h>
#define maxn 500000
int v[maxn+5], u[maxn+5];
int read_array (FILE* fin, int* v) {
int n; fscanf(fin, "%d", &n);
int i;
for (i = 0; i < n; i++) fscanf(fin, "%d", &v[i]);
return n;
}
void print_array (FILE* fout, int n, int* v) {
int i;
for (i = 0; i < n; i++) fprintf(fout, "%d ", v[i]);
fprintf(fout, "\n");
}
void swap (int* a, int* b) {
int aux = *a;
*a = *b;
*b = aux;
}
void msort (int n, int* v, int l, int r, int* u) {
if (l >= r) return;
if (l+1 == r) {
if (v[l] > v[r]) swap(&v[l], &v[r]);
return;
}
int mid = (l + r) / 2;
msort(n, v, l, mid, u);
msort(n, v, mid+1, r, u);
int i = l, j = mid+1, z = 0;
while (i <= mid && j <= r) {
if (v[i] < v[j]) u[z++] = v[i++];
else u[z++] = v[j++];
}
while (i <= mid) u[z++] = v[i++];
while (j <= r) u[z++] = v[j++];
for (i = l; i <= r; i++) v[i] = u[i-l];
}
int main() {
FILE* fin = fopen("algsort.in", "r");
FILE* fout = fopen("algsort.out", "w");
int n = read_array(fin, v);
msort(n, v, 0, n-1, u);
print_array(fout, n, v);
fclose(fin);
fclose(fout);
return 0;
}