Cod sursa(job #1488951)

Utilizator moise_alexandruMoise Alexandru moise_alexandru Data 20 septembrie 2015 11:36:17
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int maxn = 500005;
int n, a[maxn], b[maxn];

void mergesort(int st, int dr) {
    if(st == dr)
        return ;
    int mid = (st + dr) / 2;
    mergesort(st, mid);
    mergesort(mid + 1, dr);
    int i = st, j = mid + 1;
    int ind = st;
    while(i <= mid && j <= dr) {
        if(a[i] <= a[j]) {
            b[ind ++] = a[i];
            ++ i;
        }
        else {
            b[ind ++ ] = a[j];
            ++ j;
        }
    }
    while(i <= mid) {
        b[ind ++] = a[i];
        ++ i;
    }
    while(j <= dr) {
        b[ind ++] = a[j];
        ++ j;
    }
    for(int i = st ; i <= dr ; ++ i)
        a[i] = b[i];
}

int main()
{
    fin >> n;
    for(int i = 1 ; i <= n ; ++ i)
        fin >> a[i];
    mergesort(1, n);
    for(int i = 1 ; i <= n ; ++ i)
        fout << a[i] << ' ';
    return 0;
}