Pagini recente » Borderou de evaluare (job #3120147) | Cod sursa (job #1912267) | Cod sursa (job #888301) | Cod sursa (job #2361088) | Cod sursa (job #1127143)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
const char inputFile[] = "algsort.in";
const char outputFile[] = "algsort.out";
void merge( std::vector<int>& values, int lower, int midd, int upper)
{
std::vector<int> leftValues (values.begin()+lower, values.begin()+midd+1);
std::vector<int> rightValues (values.begin()+midd+1, values.begin()+upper+1);
unsigned int i,j,k;
for( i=0, j=0, k=lower ; i < leftValues.size() || j < rightValues.size() ; ) {
if( j >= rightValues.size() || ( i < leftValues.size() &&
leftValues[i] < rightValues[j] ) )
values[k++] = leftValues[i++];
else
values[k++] = rightValues[j++];
}
}
void merge_sort( std::vector<int>& values, int lower, int upper )
{
if( lower == upper )
return;
int midd = ((upper - lower) >> 1) + lower;
merge_sort(values, lower, midd);
merge_sort(values, midd+1, upper);
merge(values, lower, midd, upper);
}
std::istream& operator>> (std::istream& input, std::vector<int>& vector)
{
unsigned int n;
input >> n;
for( unsigned int i = 0 ; i < n ; i++ ) {
int x;
input >> x;
vector.push_back(x);
}
return input;
}
std::ostream& operator<< (std::ostream& output, std::vector<int>& vector)
{
for( std::vector<int>::iterator it=vector.begin() ; it < vector.end() ; it++ )
output << *it << ' ';
return output;
}
int main(void)
{
std::ifstream in(inputFile);
std::ofstream out(outputFile);
std::vector<int> values;
in >> values;
merge_sort(values, 0, values.size()-1);
out << values << '\n';
return 0;
}