Cod sursa(job #2672140)

Utilizator Remus.RughinisRemus Rughinis Remus.Rughinis Data 13 noiembrie 2020 10:41:36
Problema Sortare prin comparare Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <stdlib.h>

int v[500000],a[500000];
void mergesort(int left, int right){
  int i, mid;

  if(left!=right){
    mid=(left+right)/2;
    mergesort(left,mid);
    mergesort(mid+1,right);

    for(i=left;i<=right;i++){
      a[i]=v[i];
    }
    merge(left,mid,right);
  }
}

void merge(int left, int mid, int right){
  int i=left, j=mid+1, vi=left;
  while(i<=mid&&j<=right){
    if(a[i]<=a[j]){
      v[vi]=a[i];
      vi++;
      i++;
    } else{
      v[vi]=a[j];
      vi++;
      j++;
    }
  }

  while(i<=mid){
    v[vi]=a[i];
    vi++;
    i++;
  }
  while(j<=right){
    v[vi]=a[j];
    vi++;
    j++;
  }
}

int main(){
  int n,i;
  FILE *fin, *fout;

  fin=fopen("algsort.in","r");
  fscanf(fin,"%d",&n);
  for(i=0;i<n;i++){
    fscanf(fin,"%d",&v[i]);
  }
  fclose(fin);

  mergesort(0,n-1);

  fout=fopen("algsort.out","w");
  for(i=0;i<n;i++)
    fprintf(fout,"%d ",v[i]);
  fclose(fout);
  return 0;
}