Cod sursa(job #801827)

Utilizator c_sebiSebastian Crisan c_sebi Data 24 octombrie 2012 23:28:41
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cstring>

using namespace std;


 void Merge(int a[], int p, int q, int r){ //a[p..q], a[q+1..r]
      int n1 = q - p + 1;
      int n2 = r - q;
      int *L = new int[n1]; 
      int *R = new int[n2];
	  memcpy(L, a + p, n1 * sizeof(int));
	  memcpy(R, a + q + 1, n2 * sizeof(int));
      int i = 0, j = 0, k = p;
      while(i < n1 && j < n2){
          if(L[i] <= R[j])
              a[k++] = L[i++];
            else 
              a[k++] = R[j++];
      }
      while(i < n1)
          a[k++] = L[i++];
	  delete[] L, R;
  }
   
 void MergeSort(int a[], int p, int r){
     if(p < r){
         int q = (p  + r) / 2;
         MergeSort(a, p, q);
         MergeSort(a, q + 1, r);
         Merge(a, p, q, r);
     }
 
 }
   

int main(){
	int N, *a;
	ifstream f("algsort.in");
	ofstream g("algsort.out");
	f >> N;
	a = new int[N];
	for(int i = 0; i < N; ++i)
		f >> a[i];
	MergeSort(a, 0, N-1);
	for(int i = 0; i < N; ++i)
		g << a[i] << " ";
	f.close();
	g.close();
	delete[] a;
	return 0;
}