Pagini recente » Cod sursa (job #2691828) | Cod sursa (job #1002114) | Cod sursa (job #792852) | Cod sursa (job #1621860)
#include <vector>
#include <iostream>
#include <fstream>
#include <deque>
#include <algorithm>
#include <iterator>
using namespace std;
template <typename It>
void do_merge(It st, It dr){
It mij = st + (dr-st)/2;
vector<int> tmp(dr-st, 0);
merge(st, mij, mij, dr, tmp.begin());
copy(tmp.begin(), tmp.end(), st); }
void in_place_merge_sort(const int n, vector<int>& v){
// presupunem ca n e putere a lui 2
// il indexam pe v de la 1
for(int i = 1; i <= n; ++i){
const int sz = i&-i;
for(int j = 2; j <= sz; j *= 2){
do_merge(v.begin() + i - j + 1, v.begin() + i+1); } } }
int main(){
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
f >> n;
int n_fin = 1<<(int)ceil(log2(n));
vector<int> v(n_fin+1, 0);
int maxim = 0;
for(int i = 1; i <= n; ++i){
f >> v[i];
maxim = max(maxim, v[i]); }
for(int i = n+1; i <= n_fin; ++i){
v[i] = maxim; }
in_place_merge_sort(n_fin, v);
for(int i = 1; i <= n; ++i){
g << v[i] << ' '; }
return 0; }