Cod sursa(job #3252080)

Utilizator amalia_ghicaAmalia Ghica amalia_ghica Data 28 octombrie 2024 13:42:40
Problema Sortare prin comparare Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>

using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int v[500001];
void interclasare(int a[], int s, int d)
{
    int aux[d + s], i, j, mij, poz;
    mij = (s + d) / 2;
    i = s;
    j = mij + 1;
    poz = 0;
    while(i <= mij  &&  j <= d){
        if(a[i] < a[j]){
            aux[poz] = a[i];
            i++;
            poz++;
        }
        else if(a[i] > a[j]){
            aux[poz] = a[j];
            j++;
            poz++;
        }
        else{
            aux[poz] = a[i];
            i++;
            poz++;
        }
    }
    if(i <= mij){
      for(; i <= mij; i++){
          aux[poz++] = a[i];
      }
    }else if(j <= d){
      for(; j <= d; j++){
          aux[poz++] = a[j];
      }
    }
    for(i = 0; i < poz; i++){
      a[i + s] = aux[i];
    }
}
void mergesort(int v[], int s, int d){
    int mij = (s + d) / 2, aux;
    if(d - s == 1){
        aux = v[s];
        v[s] = v[d];
        v[d] = aux;
    }else if(d > s){
        mergesort(v, s, mij);
        mergesort(v, mij + 1, d);
        interclasare(v, s, d);
    }
}
int main()
{
    int i, n;
    fin >> n;
    for(i = 0; i < n; i++){
        fin >> v[i];
    }
    mergesort(v, 0, n - 1);
    for(i = 0; i < n; i++){
        fout << v[i] << " ";
    }
    return 0;
}