Cod sursa(job #1238737)

Utilizator obidanDan Ganea obidan Data 7 octombrie 2014 17:10:50
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int b[500002];
void mergesort(int l, int r, int a[])
{
    if(l<r)
    {
     int k,i,j;
     int m=(l+r)/2;
     mergesort(l,m,a);
     mergesort(m+1,r,a);
     for(i=l, k=l, j=m+1; i<=m || j<=r; )
            if((j>r)||(i<=m && a[i]<a[j]))
                b[k++]=a[i++];
            else
                b[k++]=a[j++];
     for(k=l;k<=r;k++)a[k]=b[k];
    }
}
int partition1337(int l, int r, int a[])
{
    int p=a[r],i,j;
    i=l-1;
    for(j=l;j<r;j++)
    {
        if(a[j]<p)
            swap(a[++i],a[j]);
    }
    swap(a[i+1],a[r]);
    return i+1;
}
void quicksort(int l, int r, int a[])
{
    if(l<r)
    {
        int q=partition1337(l,r,a);
        quicksort(l,q-1,a);
        quicksort(q+1,r,a);
    }
}
int main()
{
    int n,  a[500001],i;
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    cin>>n;
    for(i=0;i<n;i++)cin>>a[i];
    quicksort(0,n-1,a);
    for(i=0;i<n;i++) cout<<a[i]<<" ";
}