Cod sursa(job #1061177)

Utilizator dropsdrop source drops Data 19 decembrie 2013 13:23:24
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX 500001
int N, V[MAX], Aux[MAX], k;

void merge_sort(int l, int r)
{
    if (l == r) return;
    else
    {
        int mid = (l+r)/2;
        merge_sort(l, mid);
        merge_sort(mid+1, r);
        int i1 = l, i2 = mid+1;
        k = 0;
        while (i1 <= mid && i2 <= r)
        {
            if (V[i1] <= V[i2])
                Aux[k++] = V[i1++]; else
                Aux[k++] = V[i2++];
        }
        while (i1 <= mid) Aux[k++] = V[i1++];
        while (i2 <= r) Aux[k++] = V[i2++];
        for (int i = l, j = 0; i <= r; i++, j++) V[i] = Aux[j];
    }
}

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

    return 0;
}