Pagini recente » oni18_d1 | Cod sursa (job #948833) | Cod sursa (job #2240289) | Cod sursa (job #1032434) | Cod sursa (job #2856267)
#include <fstream>
#include <algorithm>
#define N 500002
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
int a[N], n;
int b[N];
void citire()
{
fin>>n;
for (int i=1; i<=n; ++i) fin>>a[i];
fin.close();
}
void interclasare(int st, int mij, int dr)
{
int i=st, j=mij+1;
int k=0;
while (i<=mij && j<=dr)
if (a[i]<a[j]) b[++k]=a[i++];
else b[++k]=a[j++];
while (i<=mij) b[++k]=a[i++];
while (j<=dr) b[++k]=a[j++];
for (int i=1; i<=k; ++i)
a[st+i-1]=b[i];
}
void mergesort(int st, int dr)
{
if (dr-st<=1)
{if (a[st]>a[dr]) swap(a[st], a[dr]);}
else
{
int mij=(st+dr)/2;
mergesort(st, mij);
mergesort(mij+1, dr);
interclasare(st, mij, dr);
}
}
void afisare()
{
for(int i=1; i<=n; ++i) fout<<a[i]<<' ';
fout.close();
}
int main()
{
citire();
mergesort(1, n);
afisare();
return 0;
}