Cod sursa(job #1281588)

Utilizator cdascaluDascalu Cristian cdascalu Data 3 decembrie 2014 14:42:12
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <fstream>
#include <queue>
#include <vector>
#define Nmax 500001
using namespace std;


void mergeSort(int left, int right, int v[])
{
    if(left >= right)
        return;

    int mid = (left + right)/2;
    mergeSort(left, mid, v);
    mergeSort(mid+1, right, v);

    vector<int> sol;
    int i,j;
    for(i = left, j = mid+1; i <= mid && j <= right;)
    {
        if(v[i] <= v[j])
            sol.push_back(v[i++]);
        else
            sol.push_back(v[j++]);
    }
    while(i <= mid)
        sol.push_back(v[i++]);

    while(j <= right)
        sol.push_back(v[j++]);

    for(i = left; i <= right; ++i)
        v[i] = sol[i-left];
}
int main()
{
    ifstream f("algsort.in");
    ofstream g("algsort.out");
    int N, v[Nmax];
    f>>N;
    for(int i = 1;i <= N;++i)
        f>>v[i];

    f.close();

    mergeSort(1, N, v);

    for(int i=1;i<=N;++i)
        g<<v[i]<<" ";
    g.close();
    return 0;
}