Pagini recente » Cod sursa (job #1506869) | Cod sursa (job #3150586) | Cod sursa (job #3230770) | Cod sursa (job #3192046) | Cod sursa (job #616566)
Cod sursa(job #616566)
#include <stdio.h>
#define N_MAX 500010
int V[N_MAX];
int n;
inline void swap(int &x, int &y) {
int z = x; x = y; y = z;
}
int split(int st, int dr) {
int piv = V[(st+dr)/2];
int p = st, q = dr;
//printf("%d %d\n", p, q);
//printf("apel");
while(p < q) {
while(V[p] < piv ) p++;
while(V[q] > piv ) q--;
//printf("%d %d\n", p, q);
if(p < q) swap(V[p], V[q]);
else {
//printf("-----%d\n", q);
return q;
}
//printf("->%d %d\n", p, p+1);
//printf("->%d %d\n", q, q-1);
p++;
q--;
}
return q;
}
void quicksort(int st, int dr) {
//printf("apel---->%d %d\n", st, dr);
if(st >= dr)
return;
int m = split(st, dr);
if(m < st) m = st;
quicksort(st, m);
quicksort(m+1,dr);
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &V[i]);
quicksort(1, n);
for(int i = 1; i <= n; ++i)
printf("%d ", V[i]);
return 0;
}