Cod sursa(job #1273679)

Utilizator catalincraciunCraciun Catalin catalincraciun Data 22 noiembrie 2014 21:08:26
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
/// Craciun Catalin
///  Algsort
#include <iostream>
#include <fstream>
#include <algorithm>

#define NMax 500005

using namespace std;

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

int n;
int C[NMax];
int B[NMax];

void mergeS(int left, int right) {

    int index = 1;
    int indexLeft = left;
    int indexRight = (left+right)/2+1;
    while (indexLeft <= (left+right)/2 && indexRight <= right) {
        if (C[indexLeft] < C[indexRight]) {
            B[index] = C[indexLeft];
            indexLeft++;
            index++;
        } else {
            B[index] = C[indexRight];
            indexRight++;
            index++;
        }
    }
    while (indexLeft <= (left+right)/2) {
        B[index] = C[indexLeft];
        indexLeft++;
        index++;
    }
    while (indexRight <= right) {
        B[index] = C[indexRight];
        indexRight++;
        index++;
    }

    int pos = 1;
    for (int i=left;i<=right;i++, pos++) {
        C[i] = B[pos];
    }
}

void divide(int left, int right) {

    if (left < right) {
        int mij = (left + right)/2;
        divide(left, mij);
        divide(mij+1, right);
        mergeS(left, right);
    }
}

void read() {

    f>>n;
    for (int i=1;i<=n;i++)
        f>>C[i];
}

void output() {

    f>>n;
    for (int i=1;i<=n;i++)
        g<<C[i]<<' ';
}

int main() {

    read();
    divide(1, n);
    output();

    f.close(); g.close();
    return 0;
}