Pagini recente » Cod sursa (job #782590) | Cod sursa (job #1921909) | Cod sursa (job #1593871) | Cod sursa (job #2901124) | Cod sursa (job #1343189)
#include<cstdio>
#include<cstdlib>
#include<ctime>
using namespace std;
int N, a[500009], b[500009];
inline void swap (int &x, int &y)
{
int aux = x;
x = y;
y = aux;
}
void Sort (int st, int dr)
{
if (st>= dr)
return ;
if (st == dr + 1)
{
if (a[st] > a[dr])
swap (a[st], a[dr]);
return ;
}
if (st == dr + 2)
{
if (a[st] > a[st + 1])
swap (a[st], a[st + 1]);
if (a[st] > a[dr])
swap (a[st], a[dr]);
if (a[st + 1] > a[dr])
swap (a[st + 1], a[dr]);
return ;
}
int mij = (st + dr) >> 1;
Sort (st, mij);
Sort (mij + 1, dr);
for (int i=st; i<=dr; i++)
b[i] = a[i];
int i, j, nr = st - 1;
i = st;
j = mij + 1;
while (i<=mij || j<=dr)
{
if (i > mij || b[j] < b[j])
a[++nr] = b[j++];
else
if (j > dr)
a[++nr] = b[i++];
else
if (b[i] < b[j])
a[++nr] = b[i++];
else
a[++nr] = b[j++];
}
}
int main()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
srand (time (0));
scanf ("%d", &N);
for (int i=1; i<=N; i++)
scanf ("%d", &a[i]);
Sort (1, N);
for (int i=1; i<=N; i++)
printf ("%d ", a[i]);
return 0;
}