Cod sursa(job #1430072)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 7 mai 2015 21:06:07
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <cstdio>
#include <cstring>
#define DIM 500010
using namespace std;

FILE *fin = fopen("algsort.in" ,"r");
FILE *fout= fopen("algsort.out","w");

int N, V[DIM], aux[DIM], i, val1, val2, K, nr;
char S[DIM*10], c;

void Parseaza(){
    int M, i;
    fgets(S + 1, DIM*10, fin);
    M = strlen(S + 1);
    for(i = 1; i <= M; i ++){ nr = 0;
        while(S[i] >= '0' && S[i] <= '9')
            nr = nr * 10 + (S[i++] - '0');
        V[++N] = nr; i ++;
    }
    return;
}

void MergeSort(int A[], int B[], int l, int r){
    int m = (l + r) >> 1, i, j, k;
    if (l == r) return;
    MergeSort(A, B, l, m);
    MergeSort(A, B, m + 1, r);
    for(i=l, j=m+1, k=l; i<=m || j<=r; )
        if(j > r || (i <= m && A[i] < A[j]))
            B[k++] = A[i++];
        else
            B[k++] = A[j++];
    for(k = l; k <= r; k++) A[k] = B[k];
    return;
}

int main(){
    fscanf(fin, "%d ", &N);
    for(i = 1; i <= N; i ++)
        fscanf(fin, "%d", &V[i]);
    MergeSort(V, aux, 1, N);
    memset(S, 0, sizeof(S));
    for(i = 1; i <= N; i ++){
        val1 = V[i]; val2 = 0;
        while(val1 != 0){
            val2 = val2 * 10 + val1 % 10;
            val1 /= 10;
        }
        while(val2 != 0){
            S[++K] = val2 % 10 + '0';
            val2 /= 10;
        }
        S[++K] = ' ';
    }
    fprintf(fout, "%s", S + 1);
    return 0;
}