Cod sursa(job #628762)

Utilizator cristicecCristian Uricec cristicec Data 2 noiembrie 2011 01:46:45
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
int a[500008],n;
using namespace std;

void interclasare(int inc1, int sf1,int inc2, int sf2){
     int d[500006];
     int k=0;
	 int inc=inc1;
     while(inc1<=sf1&&inc2<=sf2){
       k++;
       if(a[inc1]<a[inc2])
         d[k]=a[inc1++];
       else
         d[k]=a[inc2++];
     }
     while(inc1<=sf1){
       k++;
       d[k]=a[inc1++];
     }
     while(inc2<=sf2){
       k++;
       d[k]=a[inc2++];
     }
     
     for(int i=1;i<=k;i++)
       a[inc+i-1]=d[i];
}

void merge_sort(int inc,int sf){
  if(inc+1<sf){
    int m=(inc+sf)/2;
    merge_sort(inc,m);
    merge_sort(m+1,sf);
    interclasare(inc,m,m+1,sf);
    }
  else
    if(a[inc]>a[sf]){
      int aux=a[inc];
      a[inc]=a[sf];
      a[sf]=aux;
      }
}


                      
              
  
int main(){
  freopen("date.in","r",stdin);
  freopen("date.out","w",stdout);
  scanf("%d", &n);
  for(int i=1;i<=n;i++){
    scanf("%d", &a[i]);
  }
  
  merge_sort(1,n);
  
  for(int i=1;i<=n;i++)
  printf("%d ", a[i]);
  
  return 0;
    
}