Pagini recente » Cod sursa (job #1367185) | Cod sursa (job #2973785) | Cod sursa (job #770787) | Cod sursa (job #522342) | Cod sursa (job #1458307)
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
#include <utility>
using namespace std;
template <typename It>
void merge(It st1, It dr1, It st2, It dr2, It rez){
while(st1 != dr1 && st2 != dr2){
*rez++ = (*st1 < *st2 ? *st1++ : *st2++); }
while(st1 != dr1){
*rez++ = *st1++; }
while(st2 != dr2){
*rez++ = *st2++; } }
template <typename It>
void my_mergesort(It st, It dr){
if(dr-st > 1){
auto mij = st + (dr-st)/2;
my_mergesort(st, mij);
my_mergesort(mij, st);
vector<int> tmp(dr-st);
merge(st, mij, mij, dr, begin(tmp));
copy(begin(tmp), end(tmp), st); } }
int main(){
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
f >> n;
vector<int> v(n);
copy_n(istream_iterator<int>(f), n, begin(v));
my_mergesort(begin(v), end(v));
copy(begin(v), end(v), ostream_iterator<int>(g, " "));
return 0; }