Pagini recente » Cod sursa (job #682132) | Cod sursa (job #3151075) | Cod sursa (job #2633787) | Cod sursa (job #703904) | Cod sursa (job #2999185)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
typedef const unsigned int cint;
template <class T>
bool default_cmp(T x, T y)
{
return (x<y);
}
template <class T>
void Merge(T v[], cint st, cint mj, cint dr, bool cmp(T, T)=default_cmp)
{
unsigned int i=st, j=mj+1, k=0;
T *tmp=new T[dr-st+1];
while(i<=mj && j<=dr)
{
if(cmp(v[i], v[j])) tmp[k ++]=v[i ++];
else tmp[k ++]=v[j ++];
}
while(i<=mj) tmp[k ++]=v[i ++];
while(j<=dr) tmp[k ++]=v[j ++];
for(i=st, j=0; i<=dr; ++i, ++j)
{
v[i]=tmp[j];
}
delete[] tmp;
}
template <class T>
void MergeSort(T v[], cint st, cint dr, bool cmp(T, T)=default_cmp)
{
if(st>=dr) return ;
cint mj=st+(dr-st)/2;
MergeSort(v, st, mj, cmp);
MergeSort(v, mj+1, dr, cmp);
Merge(v, st, mj, dr);
}
int v[500001], n;
int main()
{
fin>>n;
int i;
for(i=0; i<n; ++i)
{
fin>>v[i];
}
MergeSort<int>(v, 0, n-1);
for(i=0; i<n; ++i)
{
fout<<v[i]<<' ';
}
return 0;
}