Cod sursa(job #1350424)

Utilizator MaarcellKurt Godel Maarcell Data 20 februarie 2015 19:54:13
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
using namespace std;

int N,a[500010];

void swp(int &x, int &y){
    int aux=x;
    x=y;
    y=aux;
}

void qsort(int l, int r){
    if (l>=r) return;
    int i,c=l,ind,c2;
    ind=(l+(rand()%(r-l+1)));

    swp(a[ind],a[r]);

    for (i=l; i<r; i++)
        if (a[i]<a[r]){
            swp(a[i],a[c]);
            c++;
        }

    c2=c;
    for (i=c; i<r; i++)
        if (a[i]==a[r]){
            swp(a[i],a[c2]);
            c2++;
        }

    swp(a[r],a[c2]);
    qsort(l,c-1);
    qsort(c2+1,r);
}

int main(){
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&N);
    srand(time(NULL));
    int i;
    for (i=1; i<=N; i++) scanf("%d",&a[i]);

    qsort(1,N);
    for (i=1; i<=N; i++) printf("%d ",a[i]);
    return 0;
}