Pagini recente » Cod sursa (job #2171839) | Cod sursa (job #2784645) | Cod sursa (job #361467) | Cod sursa (job #2790090) | Cod sursa (job #2864946)
#include <fstream>
#include <algorithm>
#include <random>
#include <cstdlib>
#include <ctime>
int N;
int v[500001];
// std::random_device rd;
// std::default_random_engine eng(rd());
int partition(int left, int right) {
// dont include right element ?
// std::uniform_int_distribution<int> dist(left, right - 1);
int pivot = v[left + rand() % (right - left)];
int i = left - 1, j = right + 1;
while (true) {
do
++i;
while (v[i] < pivot);
do
--j;
while (v[j] > pivot);
if (i >= j)
break;
std::swap(v[i], v[j]);
}
return i;
}
void quicksort(int left, int right) {
if (left < right) {
int i = partition(left, right);
quicksort(left, i);
quicksort(i + 1, right);
}
}
int main() {
std::ifstream in("algsort.in");
in >> N;
for (int i = 0; i < N; ++i)
in >> v[i];
srand(time(NULL));
quicksort(0, N - 1);
std::ofstream out("algsort.out");
for (int i = 0; i < N; ++i)
out << v[i] << ' ';
}