Cod sursa(job #1023549)

Utilizator luizaelenaLuiza Cucu luizaelena Data 7 noiembrie 2013 10:47:48
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>

using namespace std;

long v[500001];
long n;

void ordo ( int p, int u )
  {
    int aux;
      if ( v[p] > v[u] )
        {
            aux = v[p];
            v[p] = v[u];
            v[u] = aux;
        }
  }

void inter(int p, int m, int u)
   {
    int k,i,j;
    long a[500001];
    k=0; i=p; j=m+1;
    while ((i<=m) && (j<=u))
         if (v[i] < v[j])
            { k++;
              a[k]=v[i];
              i++;
            }
         else
            { k++;
              a[k]=v[j];
              j++;
            }
        if (i<=m)
          for (j=i;j<=m;j++)
             {k++;
              a[k]=v[j];
             }
        else
           for (i=j;i<=u;i++)
               {k++;
                a[k]=v[i];
               }
         for (i=1;i<=k;i++)
            v[p+i-1]=a[i];
   }

   void merge_sort(int p, int u)
    {
    int m;
    if ((u-p)<=1)
        ordo(p,u);
    else
        {m=((p + u) / 2);
        merge_sort(p, m);
        merge_sort(m+1, u);
        inter(p, m, u);
        }
    }

int main()
{  int i;
   ifstream f("algsort.in");
   ofstream g("algsort.out");
    f >> n;
    for (i=1;i<=n;i++)
        f >> v[i];
    merge_sort(1,n);
    for (i=1;i<=n;i++)
        g << v[i] << " ";

    f.close();
    g.close();

      return 0;
}