Cod sursa(job #1523249)

Utilizator cip_ionescuCiprian Ionescu cip_ionescu Data 12 noiembrie 2015 15:21:47
Problema Sortare prin comparare Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
int v[500000], aux[500000];
FILE *fin, *fout;

void merge(int v[], int st, int dr)
{
    int m = (st+dr) / 2, i, j, k;
    i = k = st;
    j = m + 1;
    while(i <= m && j <= dr){
        if(v[i] < v[j]) aux[k++] = v[i++];
        else aux[k++] = v[j++];
    }
    while(i <= m) aux[k++] = v[i++];
    while(j <= dr) aux[k++] = v[j++];
    for(k = st ; k <= dr ; k++) v[k] = aux[k];
}

void sort(int v[], int st, int dr)
{
    if(st == dr) return;
    int m = (st + dr) / 2;
    sort(v, st, m);
    sort(v, m + 1, dr);
    merge(v, st, dr);
}

int main()
{
    int n, i;
    fin = fopen("algsort.in", "r");
    fout = fopen("algsort.out", "w");
    fscanf(fin, "%d", &n);
    for(i = 0 ; i < n ; i++){
        fscanf(fin, "%d", &v[i]);
    }
    sort(v, 0, n - 1);
    for(i = 0 ; i < n ; i++){
        fprintf(fout, "%d ", v[i]);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}