Cod sursa(job #1913920)

Utilizator radu_cebotariRadu Cebotari radu_cebotari Data 8 martie 2017 14:44:47
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<stdio.h>
 
void merge_sort(int v[],int left,int right)
{
    if(right - left <= 0)
        return;
    else if(right - left == 1 && v[left] > v[right]){
        int ax = v[left];
        v[left] = v[right];
        v[right] = ax;
        return;
    }
    else if(right - left == 1)
        return;
    int aux[right - left + 5];
    int mid = (left + right)/2;
    merge_sort(v,left,mid);
    merge_sort(v,mid + 1,right);
    int i = left,j = mid + 1,sz = 0;
    while(i <= mid && j <= right){
        if(v[i] <= v[j]){
            aux[++sz] = v[i];
            ++i;
        }
        else{
            aux[++sz] = v[j];
            ++j;
        }
    }
    while(i <= mid){
        aux[++sz] = v[i];
        ++i;
    }
    while(j <= right){
        aux[++sz] = v[j];
        ++j;
    }
    for(int k = 1 ; k <= sz ; ++k)
        v[left + k - 1] = aux[k];
}
 
int main()
{
 
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int n,v[500005];
    scanf("%d",&n);
    for(int i = 1 ; i <= n ; ++i)
        scanf("%d",&v[i]);
    merge_sort(v,1,n);
    for(int i = 1 ; i <= n ; ++i)
        printf("%d ",v[i]);
    return 0;
}