Pagini recente » Cod sursa (job #2825634) | Cod sursa (job #2368417) | Cod sursa (job #594870) | Cod sursa (job #1679125) | Cod sursa (job #361701)
Cod sursa(job #361701)
#include <stdio.h>
#define MAXN 500002
int a[MAXN];
inline void change(int &v1,int &v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}
inline int partition(int st,int dr)
{
int i = st, j = dr-1;
int x = a[(st+dr) /2];
change(a[dr],a[(st+dr) / 2]);
while (true)
{
while (a[i]<=x && i <= dr)
{
i++;
}
while (a[j]>=x && j >= st)
{
j--;
}
if (i<j)
{
change(a[i],a[j]);
}
else
{
change(a[j+1],a[dr]);
return j+1;
}
}
}
inline void qsort(int st,int dr)
{
int r;
if (st<dr)
{
r = partition(st,dr);
qsort(st,r);
qsort(r+1,dr);
}
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
qsort(1,n);
for (int i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
return 0;
}