Pagini recente » Cod sursa (job #1547055) | Cod sursa (job #2347656) | Cod sursa (job #2500102) | Cod sursa (job #2722890) | Cod sursa (job #1343185)
#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 ;
int mij = st + rand() % (dr - st + 1);
//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;
}