Pagini recente » Cod sursa (job #1224848) | Cod sursa (job #2448638) | Cod sursa (job #2477028) | Cod sursa (job #1684939) | Cod sursa (job #616568)
Cod sursa(job #616568)
#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-1, q = dr+1;
while(1) {
p++;
q--;
while(V[p] < piv ) p++;
while(V[q] > piv ) q--;
if(p < q) swap(V[p], V[q]);
else
return q;
}
return q;
}
void quicksort(int st, int 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;
}