Pagini recente » Cod sursa (job #1054877) | Cod sursa (job #651730) | Cod sursa (job #2970841) | Cod sursa (job #1963878) | Cod sursa (job #1007544)
#include <algorithm>
#include <cstdio>
using namespace std;
int part(int A[], int left, int right) {
int pivot = A[right];
int i = left;
for (int j = left; j < right; ++j){
int isSmaller = ~((A[j] - pivot) >> 31) + 1;
int t = isSmaller & (~((i - j) >> 31) + 1);
A[i] = A[i] + A[j] * t;
A[j] = A[i] * t - A[j] * t + A[j] * (~t & 1);
A[i] = A[i] - A[j] * t;
i = i + isSmaller;
}
int tmp = A[i];
A[i] = A[right];
A[right] = tmp;
return i;
}
void qsort(int A[], int left, int right){
if (left < right){
int q = part(A, left, right);
qsort(A, left, q - 1);
qsort(A, q + 1, right);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int N, v[500000];
scanf("%d",&N);
for (int i = 0; i < N; i++) scanf("%d", v + i);
qsort(v, 0, N - 1);
for (int i = 0; i < N; i++) printf("%d ",v[i]);
return 0;
}