Cod sursa(job #2650415)

Utilizator Maria23Dutu Maria Maria23 Data 18 septembrie 2020 18:40:15
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#include<vector>
#include <iostream>
#include<cassert>
#include<fstream>
//#include<bits/stdc++.h>
using namespace std;


vector<int> interclasare(  const vector<int> &v1,  const vector<int> &v2)
{
    int ind1=0, ind2=0;
    vector<int> ans;
    while(ind1<(int)v1.size() && ind2<(int)v2.size())
    {
        if(v1[ind1]<v2[ind2])
        { ans.push_back(v1[ind1]);
            ind1++;
        }
        else{
            ans.push_back(v2[ind2]);
            ind2++;
        }
    }
    while(ind1<(int)v1.size())
    {
        ans.push_back(v1[ind1]);
        ind1++;
    }
    while(ind2<(int)v2.size())
    {
        ans.push_back(v2[ind2]);
        ind2++;
    }
    return ans;
}

vector<int> mergesort( int l, int r, const vector<int> &v)
{
    if(l>r)
        return vector<int> ();
    if(l==r)
        return vector<int>({v[l]});
    
    auto one=mergesort(l,(l+r)/2, v);
    auto two=mergesort((l+r)/2+1, r, v);
    return interclasare(one, two);
    
}

int main() {
    
    ifstream fin ("algsort.in");
    ofstream fout ("algsort.out");
    int N;
    vector<int> v;
    fin>>N;
    for(int i=1; i<=N; i++)
    {
        int x;
        fin>>x;
        v.push_back(x);
    }
    auto ans=mergesort(0, N-1, v);
    for(auto &x: ans)
        fout<<x<<" ";
   /* auto v1={7, 12, 21, 30, 45};
    auto v2={1, 2, 6, 9, 14, 27, 33, 49, 55};
    assert((interclasare(v1, v2)== vector<int>({1, 2, 6, 7, 9, 12, 14, 21, 27, 30, 33, 45, 49, 55})));*/
    return 0;
}



//for(int i=v1.size()-1; i>=0; i--)