Pagini recente » Cod sursa (job #1398564) | Istoria paginii runda/drastik_challange_1 | Cod sursa (job #1900296) | Cod sursa (job #2156889) | Cod sursa (job #1532979)
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int MAX = 5e5 + 5;
int a[MAX], length;
int partition (int a[], int left, int right) {
int pivot = a[rand() % (right - left + 1) + left];
int i = left - 1, j = right + 1;
while (true) {
do
j--;
while(a[j] > pivot);
do
i++;
while(a[i] < pivot);
if (i < j)
swap(a[i], a[j]);
else return j;
}
}
void randomizedQS(int a[], int left, int right) {
if (left >= right)
return;
int mid = partition(a, left, right);
randomizedQS(a, left, mid);
randomizedQS(a, mid + 1, right);
}
int main() {
srand(time(0));
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
scanf("%d\n", &length);
for (int i = 1; i <= length; i++)
scanf("%d ", &a[i]);
randomizedQS(a, 1, length);
for (int i = 1; i <= length; i++)
printf("%d ", a[i]);
return 0;
}