Pagini recente » Cod sursa (job #2886544) | Cod sursa (job #2193391) | Cod sursa (job #2753780) | Cod sursa (job #2457166) | Cod sursa (job #476938)
Cod sursa(job #476938)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
#define N 500001
using namespace std;
int a[N];
int n;
int part_lomuto (int l, int r)
{
int v = l + rand () % (r - l + 1);
swap (a[v], a[r]);
int i;
int nr = l - 1;
for (i = l ; i <= r; ++i)
if (a[i] <= a[r])
swap (a[++nr], a[i]);
return nr;
}
int noMore (int l, int r)
{
int i;
for (i = l + 1 ; i <= r; ++i)
if (a[l] != a[i])
return 0;
return 1;
}
void quick (int l, int r)
{
if (l >= r)
return;
if (noMore (l, r))
return;
int m = part_lomuto (l, r);
quick (l, m - 1);
quick (m, r);
}
int main ()
{
freopen ("algsort.in", "r", stdin);
freopen ("algsort.out", "w", stdout);
scanf ("%d\n", &n);
int i;
for (i = 1; i <= n; ++i)
scanf ("%d ", &a[i]);
quick (1, n);
for (i = 1; i <= n; ++i)
printf ("%d ", a[i]);
printf ("\n");
return 0;
}