Cod sursa(job #2901371)

Utilizator mariailincailinca maria nechita mariailinca Data 13 mai 2022 17:20:49
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <fstream>

using namespace std;

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

const int MAX = 500001;
int v[MAX],v1[MAX];

/*void Merge(int v[], int st, int mij, int dr) {

  int n1 = mij - st + 1;
  int n2 = dr - mij;

  int v1[n1], v2[n2];

  for (int i = 0; i < n1; i++)
    v1[i] = v[st + i];
  for (int j = 0; j < n2; j++)
    v2[j] = v[mij + 1 + j];

  // facem interclasare
  int i, j, k;
  i = 0;
  j = 0;
  k = st;


  while (i < n1 && j < n2) {
    if (v1[i] <= v2[j]) {
      v[k] = v1[i];
      i++;
    } else {
      v[k] = v2[j];
      j++;
    }
    k++;
  }

  while (i < n1) {
    v[k] = v1[i];
    i++;
    k++;
  }

  while (j < n2) {
    v[k] = v2[j];
    j++;
    k++;
  }
}*/

void mergeSort(int v[], int st, int dr) {
  if (st < dr) {
    int mij = (st +dr) / 2;
    mergeSort(v, st, mij);
    mergeSort(v, mij + 1, dr);
   int i = st, j = mij + 1, k = st;
    while(i <= mij || j <= dr)
    {
        if(j > dr || (i <= mij && v[i] < v[j]))
            v1[k++] = v[i++];
        else
            v1[k++] = v[j++];
    }
    for(i = st; i <= dr; i++)
        v[i] = v1[i];
  }
}


void printvect(int v[], int N) {
  for (int i = 1; i <= N; i++)
    fout << v[i] << " ";
}

int main()
{
    int N;
    fin >> N;
    for (int i = 1; i <= N; i++)
       fin >> v[i];
    mergeSort(v,1,N);
    printvect(v, N);
    return 0;
}