Cod sursa(job #2670060)

Utilizator Ana_22Ana Petcu Ana_22 Data 8 noiembrie 2020 20:24:32
Problema Sortare prin comparare Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 500000

int v[NMAX], v2[NMAX];

void merge( int v[], int left, int mid, int right ) {
  int i, j, k;
  i = left;
  j = mid + 1;
  k = 0;
  while( i <= mid && j <= right ) {
    if( v[i] < v[j] )
      v2[k++] = v[i++];
    else
      v2[k++] = v[j++];
  }
  while( i <= mid )
    v2[k++] = v[i++];
  while( j <= right )
    v2[k++] = v[j++];
  for( i = left; i <= right; i++ )
    v[i] = v2[i-left];
}

void mergesort( int v[], int left, int right ) {
  int mid;
  if( left != right ) {
    mid = ( left + right ) / 2;
    mergesort( v, left, mid );
    mergesort( v, mid + 1, right );
    merge( v, left, mid, right );
  }
}

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