Cod sursa(job #1244657)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 17 octombrie 2014 22:25:16
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <stdio.h>
#include <iostream>
using namespace std;

void inter_clasare(int a[], long int left, long int right)
{
    int b[250001];
    long int i,j,k=0,m=(left+right)/2;
    for(i=0;i<m;i++)
        b[i]=a[i];
    i=0;
    j=m;
    while((i<m)&&(j<=right))
        a[k++]=(b[i]<a[j]) ? b[i++] : a[j++];
    while(i<m)
        a[k++]=b[i++];
}

void merge_sort(int a[],long int left,long int right)
{
    long int m=(left+right)/2;
    if(right-left>=1)
    {
        merge_sort(a,left,m);
        merge_sort(a,m+1,right);
    }
    inter_clasare(a,left,right);
}

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