Cod sursa(job #1504116)

Utilizator razvan99hHorhat Razvan razvan99h Data 17 octombrie 2015 12:38:01
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
/*ifstream f("date.in");
ofstream g("date.out");*/
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
vector <int> v;

vector <int> mergesort(vector <int> a)
{   if(a.size()<=1)
        return a;//returnez vectorul
    int mij=(a.size()-1)/2;
    //impart in 2 jum si tot impart, apoi sortam
    vector <int> left, right;
    for(int i=0;i<a.size();i++)
        if(i<=mij)
            left.push_back(a[i]);
        else
            right.push_back(a[i]);

    a.clear();//golim vectorul ca nu mia avem nevoie de el

    left=mergesort(left);
    right=mergesort(right);

    //sortam prin interclasare
    int i, j;
    for(i=0,j=0;i<left.size() && j<right.size();)
    {   if (left[i]<=right[j])
        {   a.push_back(left[i]);//dim creste automat
            i++;
        }
        else
        {   a.push_back(right[j++]);//pot scrie si asa, e ca si i++ mai incolo

        }
    }
    //if(i<left.size())
        for(int k=i;k<left.size();k++)
                a.push_back(left[k]);//dim creste automat
    //if(j<right.size())
        for(int k=j;k<right.size();k++)
                a.push_back(right[k]);
    /*debugg

    for (int i=0;i<left.size();i++)
        cout<<left[i]<<' ';
    cout<<" si ";
    for (int i=0;i<right.size();i++)
        cout<<right[i]<<' ';
    cout<<endl;*/
    return a;
}
int main()
{
    f>>n; int x;
    for(int i=0;i<n;i++)
    {   f>>x;
        v.push_back(x);
    }
    v=mergesort(v);
    for(int i=0;i<n;i++)
        g<<v[i]<<' ';
    return 0;
}