Cod sursa(job #630486)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 5 noiembrie 2011 17:18:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n,a[500002];

void merge(int,int,int);
void merge_sort(int minimum,int maximum)
{
  if (minimum<maximum)
  {
    int medium=(minimum+maximum)/2;
    merge_sort(minimum,medium);
    merge_sort(medium+1,maximum);
    merge(minimum,medium,maximum);
  }
}
void merge(int min, int med, int max)
{
  int i=min;
  int j=med+1;
  int k=min;
  int b[500002];
  while((i<=med) and (j<=max))
  {
    if (a[i]<a[j])
    {
      b[k]=a[i];
      i++;
    }
    else
    {
      b[k]=a[j];
      j++;
    }
    k++;
  }
  if (j>max)
    while (i<=med)
    {
      b[k]=a[i];
      i++;
      k++;
    }
  else
    while (j<=max)
    {
      b[k]=a[j];
      j++;
      k++;
    }
  for (int i=min;i<=max;i++)
    a[i]=b[i];  
}

void citire()
{
  in>>n;
  for (int i=1;i<=n;i++)
    in >> a[i];
}

void afisare()
{
  for(int i=1;i<=n;i++)
    out<<a[i]<<" ";
}

int main()
{
  citire();
  merge_sort(1,n);
  afisare();
  return 0;
}