Cod sursa(job #1590015)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 4 februarie 2016 17:15:55
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

int v[500005];

void mergeThem(int l, int mij, int r){
    int j = mij+1;
    int i = l;
    int k = i-1;
    int a[500005];
    while(i <= mij && j <= r){
        if(v[i] < v[j]){
            a[++k] = v[i];
            i++;
        }else{
            a[++k] = v[j];
            j++;
        }
    }
    if(i <= mij){
        for(;i <= mij;i++){
            a[++k] = v[i];
        }
    }
    if(j <= r){
        for(;j <= r;j++){
            a[++k] = v[j];
        }
    }
    for(i = l;i <= r;i++){
        v[i] = a[i];
    }
}

void mergeSort(int l, int r){
    if(l == r){
        return;
    }
    if(l == r-1){
        if(v[l] > v[r]){
            swap(v[l],v[r]);
        }
        return;
    }
    int mij = l+(r-l)/2;
    mergeSort(l, mij);
    mergeSort(mij+1, r);
    mergeThem(l, mij, r);
}

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