Pagini recente » Cod sursa (job #3194630) | Cod sursa (job #615519) | Cod sursa (job #1284859) | Cod sursa (job #202019) | Cod sursa (job #1490626)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void quickswap(int &a, int &b) {
if(a != b) {
a = a xor b;
b = a xor b;
a = a xor b;
}
}
const int MAX_N = 500000;
int v[MAX_N];
void quicksort(int *begin, int *end) {
int n = end - begin;
if(n > 1) {
int pivot = rand() % n;
quickswap(begin[pivot], begin[n - 1]);
pivot = begin[n - 1];
int i = 0;
for(register int j = 0; j < n - 1; ++ j)
if(begin[j] < begin[n - 1])
quickswap(begin[i], begin[j]), ++ i;
int i2 = i;
for(register int j = i2; j < n; ++ j) {
if(begin[j] == begin[n - 1])
quickswap(begin[i2], begin[j]), ++ i2;
}
quicksort(begin, begin + i);
quicksort(begin + i2, end);
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int N;
scanf("%d", &N);
for(register int i = 0; i < N; ++ i)
scanf("%d", &v[i]);
quicksort(v, v + N);
for(register int i = 0; i < N; ++ i)
printf("%d ", v[i]);
printf("\n");
return 0;
}