Cod sursa(job #2619221)

Utilizator jungleTUDOSE MIHAI-CRISTIAN jungle Data 27 mai 2020 11:59:49
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

void interclasare(vector<int>& v,int p,int q,int r)
{
    int dim1=q-p+1,dim2 = r-q,i,j,k;
    vector<int> L(dim1),R(dim2);
    for(i=0; i<dim1; i++)
    {
        L[i] = v[p+i];
    }
    for(j=0; j<dim2; j++)
    {
        R[j]=v[q+j+1];
    }
    i = j = 0;
    for(k=p; k<=r && i<dim1 && j<dim2; k++)
    {
        if(L[i]<=R[j])
        {
            v[k] = L[i];
            i++;
        }
        else
        {
            v[k] = R[j];
            j++;
        }
    }
    for(i=i; i<dim1; i++)
    {
        v[k] = L[i];
        k++;
    }

    for(j=j; j<dim2; j++)
    {
        v[k] = R[j];
        k++;
    }
}

void mergesort(vector<int>& v,int st = -10,int dr = -10)
{
    if(st==-10 && dr==-10)
    {
        st = 0;
        dr = v.size()-1;
    }
    if(st < dr)
    {
        int mij = (st+dr)/2;
        mergesort(v,st,mij);
        mergesort(v,mij+1,dr);
        interclasare(v,st,mij,dr);
    }
}

int main()
{
    int i,n,x;
    vector<int>v;
    f>>n;
    for(i=0; i<n; i++)
    {
        f>>x;
        v.push_back(x);
    }
    mergesort(v);
    for(i=0; i<v.size(); i++)
    {
        g<<v[i]<<" ";
    }

    return 0;
}