Pagini recente » Cod sursa (job #2113515) | Cod sursa (job #520625) | Cod sursa (job #2583881) | Cod sursa (job #1160370) | Cod sursa (job #372323)
Cod sursa(job #372323)
#include <cstdio>
#include <algorithm>
#define N 500001
using namespace std;
#define dim 8192
int ax[dim];
int pz;
inline void cit(int &x)
{
x = 0;
while(ax[pz] < '0' || ax[pz] > '9')
if(++pz == dim) fread(ax,1,dim,stdin),pz = 0;
while(ax[pz] >= '0' && ax[pz] <= '9')
{
x = x * 10 + ax[pz] - '0';
if(++pz == dim) fread(ax,1,dim,stdin),pz = 0;
}
}
int n, a[N];
void read()
{
freopen("algsort.in","r",stdin);
scanf("%d\n", &n);
for(int i = 1; i <= n; ++i)
scanf("%d ", &a[i]);
}
inline int part(int a[], int l, int r)
{
swap(a[l + rand()%(r-l) + 1], a[r]);
int v = a[r];
int j = l - 1;
for(int i = l; i <= r; ++i)
if(a[i] <= v)
swap(a[++j], a[i]);
return j;
}
inline int part2(int a[], int l, int r)
{
//swap(a[l + rand()%(r - l) + 1], a[l]);
int v = a[l];
int i = l, j = r;
while(i <= j)
{
while(a[i] < v) ++i;
while(a[j] > v) --j;
if(i <= j)
swap(a[i++], a[j--]);
}
return i;
}
inline void quick(int a[], int l, int r)
{
if(l >= r) return;
int m = part2(a, l, r);
quick(a, l, m - 1);
quick(a, m, r);
}
int main()
{
read();
quick(a, 1, n);
// sort(a+1, a+n+1);
freopen("algsort.out","w",stdout);
for(int i = 1; i <= n; ++i)
printf("%d ", a[i]);
printf("\n");
return 0;
}