Cod sursa(job #2355470)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 26 februarie 2019 09:15:41
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>

const int MAXN = 5e5 + 5;

using namespace std;

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

int n,v[MAXN],aux[MAXN];

void combina(int left,int mid,int right){
    int i = left,j = mid + 1,index = left - 1;
    while(i <= mid and j <= right){
        if(v[i] < v[j]){
            aux[++index] = v[i];
            i++;
        }else if(v[i] >= v[j]){
            aux[++index] = v[j];
            j++;
        }
    }
    while(i <= mid){
        aux[++index] = v[i];
        i++;
    }
    while(j <= right){
        aux[++index] = v[j];
        j++;
    }
    for(int i = left; i <= right; i++)
        v[i] = aux[i];
}
void divide(int left,int right){
    if(left == right)
        return;
    int mid = (left + right) / 2;
    divide(left,mid);
    divide(mid + 1,right);
    combina(left,mid,right);
}

int main()
{
    in>>n;
    for(int i = 1; i <= n; i++)
        in>>v[i];
    divide(1,n);
    for(int i = 1; i <= n; i++)
        out<<v[i]<<" ";
    return 0;
}