Cod sursa(job #1022905)

Utilizator AndreeaPanaitAndreea Elena Panait AndreeaPanait Data 6 noiembrie 2013 10:15:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include<fstream>

using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

long a[500001],b[500001],n;

void Interclasare(long s,long m,long d)

{
 long i=s,j=m+1,k=s;

 while(i<=m && j<=d)

   {
    if(a[i]<a[j])

      {
      b[k]=a[i];
      i++;
      }

    else

      if(a[i]>a[j])

           {
            b[k]=a[j];
            j++;
            }

      else
            {
            b[k++]=a[i];
            b[k]=a[j];
            i++;
            j++;
            }

   k++;
   }

 while(i<=m)

   {
   b[k]=a[i];
   i++;
   k++;
   }

 while(j<=d)

   {b[k]=a[j++];
   k++;
   }

 k=s;

 for(k=s;k<=d;k++)
    a[k]=b[k];
}

void MergeSort(long st,long dr)

{long m;

 m=(st+dr)/2;

 if(st<dr)

   {
    MergeSort(st,m);
    MergeSort(m+1,dr);
   }

Interclasare(st,m,dr);

}

int main()
{
 long i;
 f>>n;
 for(i=1;i<=n;i++)
    f>>a[i];
 MergeSort(1,n);
 for(i=1;i<=n;i++)
    g<<a[i]<<" ";

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

 return 0;
}