Cod sursa(job #479811)

Utilizator xtremespeedzeal xtreme Data 25 august 2010 13:38:20
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#define nmax 500000


int N, v[nmax+1], newv[nmax+1]; 

void read()
	{
	 int i;
		
     freopen("algsort.in","r",stdin);
	 
	 scanf("%d",&N);
	 
	 for(i=1;i<=N;i++)
		  scanf("%d",&v[i]);
	 
	 fclose(stdin);
	}
void merge_sort(int a, int b)
	{
	 if(b==a)
		       return;
	 int mid=(a+b)/2;	  
	 merge_sort(a, mid), merge_sort(mid+1, b);
	 int it=0, i, j;
	 for(i=0, j=0;a+i<=mid && mid+1+j<=b;)
			   {
		        if(v[a+i]<=v[mid+1+j])
						 newv[++it]=v[a+i], i++;
				else
					     newv[++it]=v[mid+1+j], j++;
			   }
     for(;a+i<=mid;i++)
		     newv[++it]=v[a+i];
	 for(;mid+1+j<=b;j++)
			 newv[++it]=v[mid+1+j];
	 for(i=1;a+i-1<=b;i++)
	         v[a+i-1]=newv[i];
	}
void write()
	{
	 int i;	
		
	 freopen("algsort.out","w",stdout);
	 
	 for(i=1;i<=N;i++)
	     printf("%d ",v[i]);
	     
     printf("\n");
	 
	 fclose(stdout);
	}
int main()	
	 {
	  read();
	  merge_sort(1,N);
	  write();
	  return 0;
	 }