Cod sursa(job #829191)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 4 decembrie 2012 22:07:23
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define N_MAX 500010

int v[N_MAX];
int n;

int partition(int v[], int p, int q) {
    int piv = rand()%(q-p+1) + p;
    swap(v[p], v[piv]);
    int i = p;
    for(int j = p+1; j <= q; j++) {
        if(v[j] <= v[p]) {
             i++;
             swap(v[i], v[j]);

        }
    }
    swap(v[i], v[p]);
    return i;
}
void qsort(int v[], int p, int q) {
    if(p >= q) {
        return ;
    }
    int r = partition(v,p,q);
    qsort(v,p,r-1);
    qsort(v,r+1,q);
}
int main() {
    srand(time(NULL));
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 0; i < n; i++) {
        scanf("%d", &v[i]);
    }
    qsort(v, 0, n-1);
    for(int i = 0; i < n; i++) {
        printf("%d ", v[i]);
    }
    return 0;
}