Pagini recente » Monitorul de evaluare | Rating Stefan Jieanu (Stefan101) | Cod sursa (job #672255) | Cod sursa (job #275980) | Cod sursa (job #995384)
Cod sursa(job #995384)
#include <fstream>
#include <vector>
using namespace std;
class Sortable {
private:
vector<unsigned int> numbers_;
const unsigned int size_;
void merge(unsigned int left, unsigned int median, unsigned int right) {
vector<unsigned int> merged_halves;
unsigned int first_half_index = left;
unsigned int second_half_index = median + 1;
while (first_half_index <= median && second_half_index <= right) {
if (numbers_[first_half_index] < numbers_[second_half_index]) {
merged_halves.push_back(numbers_[first_half_index]);
first_half_index++;
} else {
merged_halves.push_back(numbers_[second_half_index]);
second_half_index++;
}
}
while (first_half_index <= median) {
merged_halves.push_back(numbers_[first_half_index]);
first_half_index++;
}
while (second_half_index <= right) {
merged_halves.push_back(numbers_[second_half_index]);
second_half_index++;
}
unsigned int copy_index;
unsigned int merged_halves_index;
for (copy_index = left, merged_halves_index = 0; copy_index <= right;
copy_index++, merged_halves_index++) {
numbers_[copy_index] = merged_halves[merged_halves_index];
}
}
void recursion(unsigned int left, unsigned int right) {
if (left >= right) return;
const unsigned int median = (left + right) / 2;
recursion(left, median);
recursion(median + 1, right);
merge(left, median, right);
}
public:
Sortable(unsigned int size, const vector<unsigned int>& numbers) : size_(size) {
numbers_ = numbers;
}
vector<unsigned int> numbers() {
return numbers_;
}
void sort() {
recursion(0, size_ - 1);
}
};
ifstream in("algsort.in");
ofstream out("algsort.out");
int main() {
unsigned int size;
unsigned int element;
vector<unsigned int> numbers;
in>>size;
for (unsigned int i = 0; i < size; i++) {
in >> element;
numbers.push_back(element);
}
Sortable sortable(size, numbers);
sortable.sort();
numbers = Sortable.numbers();
for (unsigned int i = 0; i < size; i++) {
out << numbers[i] << " ";
}
return 0;
}