Pagini recente » Rezultatele filtrării | Cod sursa (job #1242577) | Cod sursa (job #995308) | Cod sursa (job #795710) | Cod sursa (job #633909)
Cod sursa(job #633909)
#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;
}