Cod sursa(job #2232192)

Utilizator blasterzMircea Dima blasterz Data 17 august 2018 18:40:30
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <cstdio>
#include <algorithm>
#include <ctime>
#include <cstdlib>
 
using namespace std;
#define N 500001
#define dim 8192
char ax[dim];
int pz;
 
inline void cit(int &x)
{
    x = 0;
    while(ax[pz] < '0' || ax[pz] > '9')
        if(++pz == dim) fread(ax,1,dim,stdin),pz =0;
     
    while(ax[pz] >= '0' && ax[pz] <= '9')
    {
        x = x * 10 + ax[pz] - '0';
        if(++pz == dim) fread(ax,1,dim,stdin),pz = 0;
    }
}
 
int a[N];
int n;
 
inline void quick(int a[], int l, int r)
{
    if(l >= r) return;
    int p = l + rand()%(r-l+1);
    int v = a[p];
    swap(a[p], a[r]);
     
    int i , j = l-1;
 
    for(i = l; i <= r; ++i)
        if(a[i] <= v)
            swap(a[i], a[++j]);
         
    quick(a, l, j-1);
    quick(a, j+1, r);
     
}
 
 
inline void quick2(int a[], int l, int r)
{
    if(l >= r) return;
    int p = l + rand()%(r-l+1);
    int v = a[p];
    swap(a[p], a[r]);
     
    int i = l, j = r;
     
    do
    {
        while(a[i] < v) ++i;
        while(a[j] > v) --j;
         
        if(i <= j)
            swap(a[i++],a[j--]);
         
    }while(i <= j);
    quick2(a, l, i-1);
    quick2(a, j+1, r);
     
}
 
int main()
{
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    cit(n);
    for(int i = 0; i < n; ++i)
        cit(a[i]);
     
    quick2(a, 0, n - 1);
     
     
    for(int i = 0; i < n; ++i)
        printf("%d ", a[i]);
    printf("\n");
     
    return 0;
}