Pagini recente » Cod sursa (job #2474762) | Cod sursa (job #1161342) | Cod sursa (job #537404) | Cod sursa (job #2910382) | Cod sursa (job #2650474)
#include <bits/stdc++.h>
using namespace std;
int v[500004];
int sorted[500004];
int getRandom(int left, int right) {
return (abs(rand() * 10000 + rand())) % (right - left + 1) + left;
}
void qsort(int left, int right) {
if (left >= right) return;
int pivot = getRandom(left, right);
int currentIndex = left;
for (int i = left; i <= right; ++i) {
if (v[pivot] > v[i] or (v[pivot] == v[i] and i < pivot)) {
sorted[currentIndex] = v[i];
currentIndex += 1;
}
}
sorted[currentIndex] = v[pivot];
int middle = currentIndex;
currentIndex += 1;
for (int i = left; i <= right; ++i) {
if (v[pivot] < v[i] or (v[pivot] == v[i] and i > pivot)) {
sorted[currentIndex] = v[i];
currentIndex += 1;
}
}
for (int i = left; i <= right; ++i) {
v[i] = sorted[i];
}
qsort(left, middle - 1);
qsort(middle + 1, right);
}
int main() {
ifstream fin ("algsort.in");
ofstream fout ("algsort.in");
int n;
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
qsort(1, n);
for (int i = 1; i <= n; ++i) {
fout << v[i] << ' ';
}
return 0;
}