Pagini recente » Cod sursa (job #1432777) | Cod sursa (job #3251746) | Cod sursa (job #2374174) | Cod sursa (job #1002255) | Cod sursa (job #1945511)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n, v[500005];
void citire()
{
int i;
fin>>n;
for(i=1; i<=n; i++)
fin>>v[i];
fin.close();
}
void afisare()
{
int i;
for(i=1; i<=n; i++)
fout<<v[i]<<' ';
fout<<'\n';
fout.close();
}
void mergeVect(int st, int dr, int m)
{
int i, j, k, n1, n2;
n1=m-st+1;
n2=dr-m;
int a[n1+3], b[n2+3];
for(i=1; i<=n1; i++)
a[i]=v[i+st-1];
for(i=1; i<=n2; i++)
b[i]=v[i+m];
i=j=1; k=st;
while(i<=n1 && j<=n2)
{
if(a[i]<b[j])
{
v[k]=a[i];
i++;
}
else
{
v[k]=b[j];
j++;
}
k++;
}
while(i<=n1)
{
v[k]=a[i];
k++; i++;
}
while(j<=n2)
{
v[k]=b[j];
k++; j++;
}
}
void mergeSort(int st, int dr)
{
int m;
if(st<dr)
{
m=(st+dr)/2;
mergeSort(st, m);
mergeSort(m+1, dr);
mergeVect(st, dr, m);
}
}
int main()
{
citire();
mergeSort(1, n);
afisare();
return 0;
}