Cod sursa(job #792379)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 27 septembrie 2012 08:31:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <ctime>
#include <iomanip>
#define NM 500010

using namespace std;

clock_t start=clock();

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

int N,i;
int A[NM],B[NM];

void Merge (int P, int M, int U)
{
  int i,j,K;
  i=P;
  j=M+1;
  K=0;
  while (i<=M && j<=U)
    if (A[i]<=A[j])
      B[++K]=A[i++];
    else
      B[++K]=A[j++];
  while (i<=M) B[++K]=A[i++];
  while (j<=U) B[++K]=A[j++];

  for (i=P,j=1; i<=U; i++,j++)
    A[i]=B[j];
}

void MergeSort (int P, int U)
{
  if (U-P<=1)
  {
    if (A[P]>A[U]) swap(A[P],A[U]);
    return;
  }

  int M=(P+U)>>1;

  MergeSort(P,M);
  MergeSort(M+1,U);

  Merge(P,M,U);
}

int main ()
{
  f >> N;
  for (i=1; i<=N; i++)
    f >> A[i];

  MergeSort(1,N);

  for (i=1; i<=N; i++)
    g << A[i] << ' ';
  g << '\n';

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

  //cout << fixed << setprecision(4) << 1.0*(clock()-start)/CLOCKS_PER_SEC << '\n';

  return 0;
}