Cod sursa(job #2574257)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 5 martie 2020 21:09:50
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("algsort.in");
ofstream fout("algsort.out");

int v[500002], sol[500002];

void mrgsort(int l, int r){
  if(l+4>r){
    for(int i=l;i<=r;++i){
      for(int j=r;j>i;--j){
        if(v[j]<v[j-1]) v[j-1]^=v[j]^=v[j-1]^=v[j];
      }
    }
  }
  else{
    int mid=(l+r)/2;
    mrgsort(l, mid);
    mrgsort(mid+1, r);
    int i=l, j=mid+1, k=0;
    while(i<=mid&&j<=r){
      if(v[i]<v[j]) sol[++k]=v[i++];
      else sol[++k]=v[j++];
    }
    while(i<=mid) sol[++k]=v[i++];
    while(j<=r) sol[++k]=v[j++];
    for(int i=l,j=1;i<=r;++i,++j) v[i]=sol[j];
  }
}

int main()
{
  int n;
  fin>>n;
  for(int i=1;i<=n;++i){
    fin>>v[i];
  }
  mrgsort(1, n);
  for(int i=1;i<=n;++i){
    fout<<v[i]<<" ";
  }
  return 0;
}