Cod sursa(job #1395840)

Utilizator tziplea_stefanTiplea Stefan tziplea_stefan Data 21 martie 2015 16:31:22
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#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;
}