Pagini recente » Cod sursa (job #2813574) | Cod sursa (job #2774238) | Cod sursa (job #3218865) | Cod sursa (job #3276181) | Cod sursa (job #1280737)
#include <stdio.h>
#include <queue>
#define Nmax 500001
using namespace std;
void swapVec(int x, int y, int v[])
{
if(x == y)return;
v[x] = v[x] ^ v[y];
v[y] = v[x] ^ v[y];
v[x] = v[x] ^ v[y];
}
void quickSort(int left, int right, int v[])
{
if(left >= right)
return;
if(left + 1 == right)
{
if(v[left] > v[right])
swapVec(left, right, v);
return;
}
int pivot = (left + right)/2;
swapVec(pivot, right, v);
int l = left, r = right - 1;
while(l < r)
{
while(v[l] <= v[right] && l <= r)++l;
while(v[r] >= v[right] && l <= r)--r;
if(l >= r)
continue;
swapVec(l, r, v);
}
swapVec(right, l, v);
quickSort(left, l - 1, v);
quickSort(l+1, right, v);
}
int main()
{
FILE*f = freopen("algsort.in", "r", stdin);
FILE*g = freopen("algsort.out", "w", stdout);
int N, v[Nmax];
scanf("%d", &N);
for(int i = 1;i <= N;++i)
scanf("%d", &v[i]);
quickSort(1, N, v);
for(int i=1;i<=N;++i)
printf("%d ", v[i]);
return 0;
}