Cod sursa(job #1789494)

Utilizator Walrus21andrei Walrus21 Data 27 octombrie 2016 03:18:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#define N 500001

using namespace std;

int i,n,v[N];

void interclasare(int l, int m, int r)
{
    int i(l), j(m+1), k(0), a[N];
    while(k<=r-l)
    {
        if(j > r) a[++k] = v[i++];
        else while((v[i] <= v[j]) && (k < r - l)) {if(i > m) break; a[++k] = v[i++];}
        if(k > r-l) break;
        if(i > m) a[++k] = v[j++];
        else while((v[i] >= v[j]) && (k < r - l)) {if(j > r) break; a[++k] = v[j++];}
        if(k > r-l) break;
    }
    k = 0;
    for(i = l; i <=r; i++) v[i] = a[++k];
}

void merge_sort(int l, int r)
{
    int m;
    if(l < r)
    {
        m = (l + r) / 2;
        merge_sort(l, m);
        merge_sort(m+1, r);
        interclasare(l, m, r);
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
     scanf("%d", &v[i]);
    merge_sort(1, n);
    for(i = 1; i <= n; i++)
     printf("%d ", v[i]);
    return 0;
}