Cod sursa(job #3309333)

Utilizator cosmin_90Drignei Cosmin-Cristian cosmin_90 Data 3 septembrie 2025 16:57:55
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.72 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
vector<int> interclasare(vector<int> a,vector<int> b){
    vector<int> c;
    int poza=0,pozb=0;
    while(a.size()!=poza&&b.size()!=pozb){
        if(a[poza]>b[pozb]){
            c.push_back(b[pozb]);
            pozb++;
        }else{
            c.push_back(a[poza]);
            poza++;
        }
    }
    while(a.size()!=poza){
        c.push_back(a[poza]);
        poza++;
    }
    while(b.size()!=pozb){
        c.push_back(b[pozb]);
        pozb++;
    }
    return c;
}
vector<int> v;
void mergesort(int st, int dr){
    int mij=(st+dr)/2;
    vector<int> stv;
    vector<int> drv;
    if(st!=dr){
        mergesort(st,mij);
        for(int i=st;i<=mij;i++){
            stv.push_back(v[i]);
        }
        mergesort(mij+1,dr);
        for(int i=mij+1;i<=dr;i++){
            drv.push_back(v[i]);
        }
        vector<int> v2=interclasare(stv,drv);
        for(int i=0;i<=dr-st;i++){
            v[i+st]=v2[i];
        }
    }
}
/*
vector<int> mergesort(vector<int> a){
    if(a.size()>1){
        vector<int> stv;
        vector<int> drv;
        for(int i=0;i<a.size()/2;i++){
            stv.push_back(a[i]);
        }
        for(int i=a.size()/2;i<a.size();i++){
            drv.push_back(a[i]);
        }
        return interclasare(mergesort(stv),mergesort(drv));
    }else{
        return a;
    }
}
*/
long long int n;
int main(){
    fin>>n;
    for(int i=0;i<n;i++){
        int p;
        fin>>p;
        v.push_back(p);
    }
    mergesort(0,v.size()-1);
    for(int i=0;i<v.size();i++){
        fout<<v[i]<<" ";
    }
    return 0;
}