Pagini recente » Cod sursa (job #1948747) | Cod sursa (job #2951069) | Cod sursa (job #1637352) | Cod sursa (job #2213663) | Cod sursa (job #2224104)
#include <fstream>
#include <vector>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
const string IN_FILE = "algsort.in";
const string OUT_FILE = "algsort.out";
inline int random(const int lower, const int upper) {
return lower + rand() % (upper - lower + 1);
}
int partition(vector<int>& values, const int from, const int to) {
const int pivot = values[random(from, to)];
int i = from - 1, j = to + 1;
while (true) {
for (i++; values[i] < pivot; i++);
for (j--; values[j] > pivot; j--);
if (i >= j) return j;
swap(values[i], values[j]);
}
return from;
}
void quickSort(vector<int>& values, const int from, const int to) {
if (from >= to) return;
const int split = partition(values, from, to);
quickSort(values, from, split);
quickSort(values, split + 1, to);
}
void quickSort(vector<int>& values) {
quickSort(values, 0, int(values.size()) - 1);
}
vector<int> readValues() {
ifstream in(IN_FILE);
int n;
in >> n;
auto values = vector<int>(n);
for (int i = 0; i < n; i++) {
in >> values[i];
}
in.close();
return values;
}
void writeOutput(const vector<int>& values) {
ofstream out(OUT_FILE);
for (int i = 0; i < int(values.size()); i++) {
out << values[i] << (i + 1 < int(values.size()) ? " " : "\n");
}
out.close();
}
int main() {
srand(time(0));
auto values = readValues();
quickSort(values);
writeOutput(values);
return 0;
}