Cod sursa(job #2623400)

Utilizator euyoTukanul euyo Data 3 iunie 2020 09:14:37
Problema Sortare prin comparare Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <stdio.h>
#define MAXN 500000

int v[MAXN];

void merge( int st, int dr, int mij ) {
  int n = 0, m = 0, l[MAXN], r[MAXN], i, j, k;
  
  for ( i = st; i <= mij; ++i ) {
	l[n++] = v[i];
  }
  for ( i = mij + 1; i <= dr; ++i ) {
	r[m++] = v[i]; 
  }
  i = j = 0;
  k = st;
  while ( i < n && j < m ) {
	if ( l[i] < r[j] ) {
	  v[k] = l[i];
	  ++i;
	} else {
	  v[k] = r[j];
	  ++j;
	}
	++k;
  }
  while ( i < n ) {
	v[k++] = l[i++];
  }
  while ( j < m ) {
	v[k++] = r[j++];
  }
}

void mergeSort( int st, int dr ) { 
  int mij = (st + dr) / 2;

  if ( st < dr ) {
	mergeSort( st, mij );
	mergeSort( mij + 1, dr );
	merge( st, dr, mij );
  }
}

int main() {
  FILE *fin = fopen( "algsort.in", "r" );
  FILE *fout = fopen( "algsort.out", "w" );
  int n, i;
  
  fscanf( fin, "%d", &n );
  for ( i = 0; i < n; ++i ) {
	fscanf( fin, "%d", &v[i] );
  }
  mergeSort( 0, n - 1 );
  for ( i = 0; i < n; ++i ) {
	fprintf( fout, "%d ", v[i] );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}