Cod sursa(job #1480050)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 1 septembrie 2015 23:15:31
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>

const int MAXN = 500004;
int n, a[MAXN], b[MAXN>>1];
void inter_clasare(int left, int right)
{
//    printf("%d %d\n", left, right);
    int i, j, k=0, m=(left+right)>>1;
    for(i = left;i <= m; ++i)
        b[ k++ ] = a[ i ];
    i = 0;
    k = left;
    j = m+1;
    while((i <= m-left)&&(j <= right))
        a[ k++ ]=(b[i] < a[j]) ? b[i++] : a[j++];
    while(i<=m-left)
        a[k++]=b[i++];
}

void merge_sort(int left,int right)
{
    int m = (left+right)>>1;
    if(right != left)
    {
        merge_sort(left,m);
        merge_sort(m+1,right);
        inter_clasare(left,right);
    }
}

int main()
{
    FILE *in = fopen("algsort.in", "r");
    FILE *out = fopen("algsort.out", "w");
    int n,i;
    fscanf(in,"%d",&n);
    for(i = 0;i < n; ++i)
        fscanf(in,"%d",a+i);

    merge_sort(0,n-1);
    for(i = 0;i < n;++i)
        fprintf(out,"%d ",a[i]);
    return 0;
}