Pagini recente » Cod sursa (job #816251) | Cod sursa (job #326922) | Cod sursa (job #2771709) | Cod sursa (job #2157667) | Cod sursa (job #2619221)
#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;
}