Pagini recente » Cod sursa (job #1098236) | Cod sursa (job #1411085) | Cod sursa (job #1019634) | Cod sursa (job #2427320) | Cod sursa (job #1484439)
#include <iostream>
#include <fstream>
using namespace std;
ifstream F("algsort.in");
ofstream G("algsort.out");
const int N=500010;
int a[N],n,v[N],k;
void mergesort(int l,int r)
{
if ( r-l+1==1 ) // l == r
return ;
int m=(l+r)/2;
mergesort(l,m);
mergesort(m+1,r);
k=0;
int i=l;
int j=m+1;
/**
while ( i <= m || j <= r )
{
if ( i > m )
v[++k] = a[j++];
else
...
else
if ( a[i] == a[j] )
v[++k] = a[i++] , v[++k] = a[j++];
}
*/
while ( i<=m || j<=r )
{
if ( i>m )
{
k++;
v[k]=a[j];
j++;
}
else
if ( j>r )
{
k++;
v[k]=a[i];
i++;
}
else
if ( a[i]>a[j] )
{
k++;
v[k]=a[j];
j++;
}
else
if ( a[i]<a[j] )
{
k++;
v[k]=a[i];
i++;
}
else
if ( a[i]==a[j] )
{
k++;
v[k]=a[i];
k++;
v[k]=a[j];
i++;j++;
}
}
for (int i=1;i<=k;++i)
a[l+i-1] = v[i];
}
int main()
{
F>>n;
for (int i=1;i<=n;i++ )
F>>a[i];
mergesort(1,n);
for (int i=1;i<=n;i++ )
G<<a[i]<<' ';
}