Pagini recente » Cod sursa (job #1702229) | Cod sursa (job #640181) | Cod sursa (job #673588) | Cod sursa (job #879287) | Cod sursa (job #498205)
Cod sursa(job #498205)
#include <fstream>
using namespace std;
const char InFile[]="algsort.in";
const char OutFile[]="algsort.out";
const int MaxN=500111;
ifstream fin(InFile);
ofstream fout(OutFile);
int n,v[MaxN],buffer[MaxN];
void merge_sort(int st, int sf)
{
if(st<sf)
{
int mid1=st+(sf-st)/3;
int mid2=mid1+(sf-st)/3;
merge_sort(st,mid1);
merge_sort(mid1+1,mid2);
merge_sort(mid2+1,sf);
int min1=st;
int min2=mid1+1;
int min3=mid2+1;
int st2=st;
--st;
while(min1<=mid1 && min2<=mid2 && min3<=sf)
{
if(v[min1]<v[min2])
{
if(v[min1]<v[min3])
{
buffer[++st]=v[min1++];
}
else
{
buffer[++st]=v[min3++];
}
}
else
{
if(v[min2]<v[min3])
{
buffer[++st]=v[min2++];
}
else
{
buffer[++st]=v[min3++];
}
}
}
while(min1<=mid1 && min2<=mid2)
{
if(v[min1]<v[min2])
{
buffer[++st]=v[min1++];
}
else
{
buffer[++st]=v[min2++];
}
}
while(min2<=mid2 && min3<=sf)
{
if(v[min2]<v[min3])
{
buffer[++st]=v[min2++];
}
else
{
buffer[++st]=v[min3++];
}
}
while(min3<=sf && min1<=mid1)
{
if(v[min3]<v[min1])
{
buffer[++st]=v[min3++];
}
else
{
buffer[++st]=v[min1++];
}
}
while(min1<=mid1)
{
buffer[++st]=v[min1++];
}
while(min2<=mid2)
{
buffer[++st]=v[min2++];
}
while(min3<=sf)
{
buffer[++st]=v[min3++];
}
for(register int i=st2;i<=sf;++i)
{
v[i]=buffer[i];
}
}
}
int main()
{
fin>>n;
for(register int i=1;i<=n;++i)
{
fin>>v[i];
}
fin.close();
merge_sort(1,n);
for(register int i=1;i<=n;++i)
{
fout<<v[i]<<" ";
}
fout.close();
return 0;
}