Pagini recente » Borderou de evaluare (job #2783265) | Cod sursa (job #575367) | Cod sursa (job #1038964) | Cod sursa (job #547099) | Cod sursa (job #2708706)
#include <bits/stdc++.h>
using namespace std;
int v[3000003];
int aux[3000003];
int randomNumber(int a, int b) {
return abs((rand() << 14) + rand()) % (b - a + 1) + a;
}
void quickSort (int left, int right) {
if (left == right) return;
int pivot = randomNumber(left, right);
int currentAuxPosition = left;
for (int i = left; i <= right; ++i) {
if (v[pivot] > v[i]) {
aux[currentAuxPosition] = v[i];
currentAuxPosition += 1;
}
}
int firstPivot = currentAuxPosition;
for (int i = left; i <= right; ++i) {
if (v[pivot] == v[i]) {
aux[currentAuxPosition] = v[i];
currentAuxPosition += 1;
}
}
int lastPivot = currentAuxPosition - 1;
for (int i = left; i <= right; ++i) {
if (v[pivot] < v[i]) {
aux[currentAuxPosition] = v[i];
currentAuxPosition += 1;
}
}
for (int i = left; i <= right; ++i) {
v[i] = aux[i];
}
if (firstPivot > left) {
quickSort(left, firstPivot - 1);
}
if (lastPivot < right) {
quickSort(lastPivot + 1, right);
}
}
int main()
{
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int n;
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
quickSort(1, n);
for (int i = 1; i <= n; ++i) {
fout << v[i] << ' ';
}
return 0;
}