Pagini recente » Cod sursa (job #2693933) | Cod sursa (job #702871) | Cod sursa (job #3209247) | Cod sursa (job #2056745) | Cod sursa (job #2073760)
#include <fstream>
using namespace std;
int N,v[500005],b[500005],c[500005];
inline void Read()
{
int i;
ifstream fin("algsort.in");
fin>>N;
for(i=1;i<=N;i++)
fin>>v[i];
fin.close();
}
inline void Merge(int a[], int left, int right)
{
int i,j,n1,n2;
n1=0;
for(i=left;i<=(left+right)/2;i++)
b[++n1]=a[i];
n2=0;
for(i=(left+right)/2+1;i<=right;i++)
c[++n2]=a[i];
N=left-1;
i=j=1;
while(i<= n1 && j<= n2)
{
if(b[i]==c[j])
{
a[++N]=b[i];a[++N]=b[i];
i++;j++;
}
else
if(b[i]<c[j])
a[++N]=b[i++];
else
a[++N]=c[j++];
}
while(i<= n1)
a[++N]=b[i++];
while(j<= n2)
a[++N]=c[j++];
}
inline void MergeSort(int a[], int left, int right)
{
if(left==right)
return ; // sirul de 1 e deja sortat
MergeSort(a,left,(left+right)/2);
MergeSort(a,(left+right)/2+1,right);
Merge(a,left,right);
}
inline void Write()
{
int i;
ofstream fout("algsort.out");
for(i=1;i<=N;i++)
fout<<v[i]<<" ";
fout<<"\n";
fout.close();
}
int main()
{
Read();
MergeSort(v,1,N);
Write();
return 0;
}