Cod sursa(job #633909)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 15 noiembrie 2011 01:29:45
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<cstdio>
#include<stdlib.h>
#define N 500005
int n;
int A[N];
int swap(int i, int j) {
    int aux = A[i];
    A[i] = A[j];
    A[j] = aux;
}
int partition(int p, int q) {
    int dif = q - p + 1;
    int ran = rand() % dif;
    swap(p, p + ran);
    int i = p + 1;
    int j = q;
    while(i < j) {
        while((A[i] <= A[p]) && (i < j))
         i++;
        while((A[j] >= A[p]) && (j > i))
         j--;
        if(i < j)
         swap(i, j);
    }
    int ko = i - 1;
    if(A[i] < A[p])
     ko = i;
    swap(ko, p);
    return ko;
}
void qsort(int p ,int q) {
    if(p < q) {
        int x = partition(p,q);
        qsort(p, x-1);
        qsort(x + 1, q);
    }
}
int main() {
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);
    scanf("%d",&n);
    for(int i = 1; i <= n; i++)
     scanf("%d",&A[i]);
    qsort(1, n);
    for(int i = 1; i <= n; i++)
     printf("%d ",A[i]);
    return 0;
}