Pagini recente » Cod sursa (job #1316033) | Cod sursa (job #2238155) | Cod sursa (job #172790) | Cod sursa (job #1104476) | Cod sursa (job #1395840)
#include <fstream>
#define NM 105
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[NM], n, i;
int aux[NM];
int MERGE(int p, int q, int r)
{
int k1, k2, i;
k1=p;
k2=q+1;
i=p;
while (k1<=q && k2<=r)
if (v[k1] <= v[k2])
aux[i++] = v[k1++];
else
aux[i++] = v[k2++];
while (k1<=q)
aux[i++] = v[k1++];
while (k2<=r)
aux[i++] = v[k2++];
for (i=p; i<=r; i++)
v[i]=aux[i];
// ai "primul vector" in v[p] ... v[q]
// al "doilea vector" in v[q+1] ... v[r]
// le interclasezi in aux[p] ... aux[r]
// si apoi copiezi la loc in v pe pozitiile corecte v[p] ... v[r]
}
int MERGESORT(int p, int r)
{
int q,s,x;
if (p<r)
{
q=(p+r) / 2;
s=2*(p+r) / 3;
x=(s+r) / 2;
MERGESORT(p, q);
MERGESORT(q+1, r);
MERGE(p, q, r);
}
}
int main()
{
fin >> n;
for (i=1; i<=n; i++)
fin >> v[i];
MERGESORT(1, n);
for (i=1; i<=n; i++)
fout << v[i] << " ";
fout << '\n';
fin.close();
fout.close();
return 0;
}