Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Atasamentele paginii 7953532771521155 | Cod sursa (job #752777) | Cod sursa (job #1550032)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int x[500003];
int b[500003];
void Inter(int p, int m, int u)
{
int k1=p, k2=m+1, k3=p;
while(k1<=m && k2<=u)
{
if(x[k1]<x[k2])
{
b[k3]=x[k1];
k1++;
}
else
{
b[k3]=x[k2];
k2++;
}
k3++;
}
if(k1>m)
for(int k=k2;k<=u;k++)
{
b[k3]=x[k];
k3++;
}
else
for(int k=k1;k<=m;k++)
{
b[k3]=x[k];
k3++;
}
for(int i=p;i<=u;i++)
{
x[i]=b[i];
}
}
void InsertSort(int p, int u)
{
for(int i=p;i<u;i++)
{
for(int j=i+1;j<=u;j++)
{
if(x[i]>x[j])
{
int aux=x[i];
x[i]=x[j];
x[j]=aux;
}
}
}
}
void MergeSort(int p, int u)
{
if(u-p<=11) { InsertSort(p,u); }
else
{
int k=(p+u)/2;
MergeSort(p,k);
MergeSort(k+1,u);
Inter(p,k,u);
}
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>x[i];
MergeSort(1,n);
for(int i=1;i<=n;i++)
{
g<<x[i]<<' ';
}
return 0;
}