Cod sursa(job #1018666)

Utilizator sziliMandici Szilard szili Data 29 octombrie 2013 21:15:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int a[500001];
int n;
int L[250001];
int R[250001];

void mergeResults(int first, int middle, int last){
    for (int i=first; i<=middle; i++){
        L[i-first] = a[i];
    }
    for (int i=middle+1; i<=last; i++){
        R[i-(middle+1)] = a[i];
    }

    int i = 0;
    int iMax = middle-first + 1;
    int j = 0;
    int jMax = last-middle;

    int index = first;
    while (i<iMax && j <jMax){
        if (L[i] < R[j]){
            a[index++] = L[i++];
        } else {
            a[index++] = R[j++];
        }
    }

    while (i<iMax){
        a[index++] = L[i++];
    }

    while (j<jMax){
        a[index++] = R[j++];
    }
}

void mergeSort(int first, int last){

    if (first < last){
        int middle = (first+last)/2;

        mergeSort(first, middle);
        mergeSort(middle+1, last);
        mergeResults(first, middle, last);
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);

    scanf("%d", &n);

    for (int i=0; i<n; i++){
        scanf("%d", &a[i]);
    }

    mergeSort(0, n-1);

    for (int i=0; i<n; i++){
        printf("%d ", a[i]);
    }

    return 0;
}