Pagini recente » Monitorul de evaluare | Cod sursa (job #52552) | Cod sursa (job #2181630) | Cod sursa (job #702179) | Cod sursa (job #1849561)
#include <cstdio>
#include <queue>
using namespace std;
const int N = 500004;
int a [N];
int part(int st, int dr){
int aux, m, p, i, j;
m = (st + dr) / 2;
p = a [m];
i = st - 1;
j = dr + 1;
while (1){
do {++i;}while(a [i] < p);
do {--j;}while(a [j] > p);
if (i < j) {
aux = a [i];
a [i] = a [j];
a [j] = aux;
}
else return j;
}
}
void quick(int st, int dr){
int m, sp;
if (st < dr){
sp = part(st, dr);
quick(st, sp);
quick(sp + 1, dr);
}
}
int main(){
int n, i, k;
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i++)
scanf("%d", &a [i]);
quick(1, n);
for (i = 1; i <= n; i++)
printf("%d ", a [i]);
printf("\n");
return 0;
}