Pagini recente » Cod sursa (job #235615) | Cod sursa (job #297978) | Cod sursa (job #2475067) | Cod sursa (job #3251142) | Cod sursa (job #838015)
Cod sursa(job #838015)
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
const int MAXN = 500001;
int A[MAXN];
inline void swap(int i, int j)
{
int aux = A[i];
A[i] = A[j];
A[j] = aux;
}
int partition(int left, int right, int val)
{
int i = left - 1, j = right;
for (;;) {
while (A[++i] < val);
while (val < A[--j]) if (j == left) break;
if (i >= j) break;
swap(i, j);
}
return i;
}
void quicksort(int left, int right)
{
if (left >= right)
return;
int rpos = left + (rand() % (right - left + 1));
swap(right, rpos);
int p = partition(left, right, A[right]);
swap(right, p);
quicksort(left, p - 1);
quicksort(p + 1, right);
}
int main()
{
srand(time(NULL));
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n;
cin >> n;
for (int i = 0; i < n; ++i)
cin >> A[i];
quicksort(0, n - 1);
for (int i = 0; i < n - 1; ++i)
cout << A[i] << " ";
cout << A[n - 1] << "\n";
return 0;
}