Pagini recente » Cod sursa (job #1482433) | Cod sursa (job #3172598) | Cod sursa (job #1843325) | Cod sursa (job #1878269) | Cod sursa (job #1934724)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int N;
int v[500001];
/*void MergeSort(int p, int m, int q)
{
vector <int> b;
int i,j;
vector <int>::iterator it;
i=p;
j=m+1;
while(i<=m && j<=q)
if(v[i]<v[j])
b.push_back(v[i++]);
else
b.push_back(v[j++]);
while(i<=m) b.push_back(v[i++]);
while(j<=q) b.push_back(v[j++]);
for(i=p,it=b.begin(); i<=q; ++i,++it)
v[i]=*it;
}*/
void MergeSort(int p, int m, int q)
{
int i,j,k;
int b[500001];
i=p;
j=m+1;
k=0;
while(i<=m && j<=q)
if(v[i]<v[j])
b[++k]=v[i++];
else
b[++k]=v[j++];
while(i<=m) b[++k]=v[i++];
while(j<=q) b[++k]=v[j++];
k=0;
for(i=p; i<=q; ++i)
v[i]=b[++k];
}
void divide(int p, int q)
{
if(q>p)
{
int m=(p+q)/2;
divide(p,m);
divide(m+1,q);
MergeSort(p,m,q);
}
}
int main()
{
int i;
fin>>N;
for(i=1; i<=N; ++i) fin>>v[i];
divide(1,N);
for(i=1; i<=N; ++i)
fout<<v[i]<<' ';
return 0;
}