Cod sursa(job #1073308)

Utilizator mihai995mihai995 mihai995 Data 5 ianuarie 2014 22:03:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>
using namespace std;

const int N = 5e6;

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

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

void mergeSort(int v[], int n){
    int dr, m;
    for (int step = 2 ; step < (n << 1) ; step <<= 1)
        for (int st = 0 ; st < n ; st += step){
            dr = min(st + step, n);
            m = st + (step >> 1);

            if (dr <= m)
                continue;

            for (int i = st, j = m, k = st ; k < dr ; k++)
                if (dr <= j || (i < m && v[i] < v[j]))
                    aux[k] = v[i++];
                else
                    aux[k] = v[j++];

            for (int i = st ; i < dr ; i++)
                v[i] = aux[i];
        }
}

int main(){
    in >> n;
    for (int i = 0 ; i < n ; i++)
        in >> v[i];

    mergeSort(v, n);

    for (int i = 0 ; i < n ; i++)
        out << v[i] << " ";
    out << "\n";

    return 0;
}