Cod sursa(job #1016465)

Utilizator sorinos1357FMI Siman Marius Sorin sorinos1357 Data 26 octombrie 2013 12:35:26
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;

int a[500001],n;

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

void sort(int p,int q){
  int m;
  if(a[p]>a[q]){
    m=a[p];
    a[p]=a[q];
    a[q]=m;
  }
}

void interc(int p,int q,int m){
  int b[500001],i,j,k;
  i=p;
  j=m+1;
  k=1;
  while(i<=m && j<=q)
    if(a[i] <= a[j]){
      b[k]=a[i];
      i++;
      k++;
    }
    else{
      b[k]=a[j];
      j++;
      k++;
    }

    if(i<=m)
      for(j=i;j<=m;j++){
	b[k]=a[j];
        k++;
      }
    else
      for(i=j;i<=q;j++){
	b[k]=a[i];
        k++;
      }
    k=1;
    for(i=p;i<=q;i++){
      a[i]=b[k];
      k++;
    }
}

void divimp(int p,int q){
  if((q-p) <= 1) sort(p,q);
  else{
    divimp(p,(p+q)/2);
    divimp((p+q)/2+1,q);
    interc(p,q,(p+q)/2);
  }
}

int main(){
    int i;
    f>>n;
    for(i=1;i<=n;i++)
        f>>a[i];
    divimp(1,n);
    for(i=1;i<=n;i++)
        g<<a[i]<<" ";
    f.close();
    g.close();
    return 0;
}