Cod sursa(job #3227068)

Utilizator RosheRadutu Robert Roshe Data 25 aprilie 2024 01:18:46
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#define limit 500000

using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");

void merge(unsigned int* A, int l, int m, int r){
  unsigned int* left = (unsigned int*)malloc((m - l + 1)*sizeof(unsigned int));
  unsigned int* right = (unsigned int*)malloc((r - m)*sizeof(unsigned int));
  for(int i = 0 ; i < m - l + 1; i++)
    left[i] = A[l + i];
  for(int i = 0; i < r - m; i++)
    right[i] = A[m + 1 + i];
  int i = 0;
  int j = 0;
  int index = l;
  while(i < m-l+1 && j < r-m){
    if(left[i] <= right[j]){
      A[index] = left[i];
      i++;
      index++;
    }
    else{
      A[index] = right[j];
      j++;
      index++;
    }
  }
  while(i < m-l+1){
    A[index] = left[i];
    i++;
    index++;
  }
  while(j < r-m){
    A[index] = right[j];
    j++;
    index++;
  }
  delete[] left;
  delete[] right;
}

void mergesort(unsigned int* A, int l, int r){
  if(l < r){
    int m = (l + r) / 2;
    mergesort(A, l, m);
    mergesort(A, m+1, r);
    merge(A, l, m, r);
  }
}

int main(){
  unsigned int A[limit];
  int N;
  fin >> N;
  for(int i = 0; i<N; i++)
    fin >> A[i];
  mergesort(A, 0, N-1);
  for(int i = 0; i<N; i++)
    fout << A[i] << " ";
}