Cod sursa(job #1464601)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 23 iulie 2015 23:16:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<cstdio>
using namespace std;
int v[500010],aux[500010];
void interclasare(int left,int right){
    int i=left,j=(left+right)/2+1,k=left-1;
    while(i<=(left+right)/2&&j<=right)
        if(v[i]>v[j]){
            k++;
            aux[k]=v[j];
            j++;
        }
        else{
            k++;
            aux[k]=v[i];
            i++;
        }
    while(i<=(left+right)/2){
        k++;
        aux[k]=v[i];
        i++;
    }
    while(j<=right){
        k++;
        aux[k]=v[j];
        j++;
    }
    for(i=left;i<=right;i++)
        v[i]=aux[i];
}
void merge_sort(int left,int right){
    int aux;
    if(left==right)
        return;
    if(left+1==right){
        if(v[left]>v[right]){
            aux=v[left];
            v[left]=v[right];
            v[right]=aux;
        }
        return;
    }
    merge_sort(left,(left+right)/2);
    merge_sort((left+right)/2+1,right);
    interclasare(left,right);
}
int main(){
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    int n,i;
    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;
}