Cod sursa(job #1732854)
Utilizator | Data | 22 iulie 2016 18:40:31 | |
---|---|---|---|
Problema | Sortare prin comparare | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.09 kb |
#include <fstream>
#define Nmax 1005
using namespace std;
ifstream f("merge.in");
ofstream g("merge.out");
int a[Nmax], b[Nmax];
void merge(int l, int r)
{
if (r>l)
{
merge(l, (l+r)/2);
merge((r+l)/2+1,r);
int p=l,q=(l+r)/2+1, z=l;
while (p<=(l+r)/2 && q<=r)
{
if(a[p]<a[q])
{
b[z]=a[p];
z++;
p++;
}
else
{
b[z]=a[q];
z++;
q++;
}
}
while(p<=(l+r)/2)
{
b[z]=a[p];
z++;
p++;
}
while(q<=r)
{
b[z]=a[q];
z++;
q++;
}
for(int i=l; i<=r; i++)
a[i]=b[i];
}
}
int n;
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>a[i];
merge(1,n);
for(int i=1; i<=n; i++)
g<<a[i]<<" ";
}