Cod sursa(job #1221368)

Utilizator o_micBianca Costin o_mic Data 20 august 2014 11:29:09
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <iostream>
#include <fstream>
#define MAX_LENGTH 500000

using namespace std;

int str[MAX_LENGTH];
long n;

void merge(int a[MAX_LENGTH], long n, int b[MAX_LENGTH], long m, int result[MAX_LENGTH], long &length)
{
    long i = 0, j = 0, k;
    length = m + n;
    for(k = 0 ; (i < n) && (j < m) ; k++)
        if(a[i] < b[j])
        {
            result[k] = a[i];
            i++;
        }
        else
        {
            result[k] = b[j];
            j++;
        }
    while(i < n)
    {
        result[k] = a[i];
        i++;
        k++;
    }
    while(j < m)
    {
        result[k] = b[j];
        j++;
        k++;
    }
}

void merge_sort(int strng[MAX_LENGTH], long n)
{
    long i;
    int *a, *b;
    if( n != 1)
    {
        a = new int[(n+1)/2];
        b = new int[n/2];
        for(i = 0 ; i < (n+1)/2 ; i++)
            a[i] = strng[i];
        for(i = 0 ; i < n/2 ; i++)
            b[i] = strng[i + (n+1)/2];
        merge_sort(a, (n+1)/2);
        merge_sort(b, n/2);
        merge(a, (n+1)/2, b, n/2, strng, n);
        delete a;
        delete b;
    }
}

int main()
{
    long i;
    fstream f("algsort.in", ios::in);
    fstream g("algsort.out", ios::out);
    f >> n;
    for(i = 0 ; i < n ; i++)
        f >> str[i];
    merge_sort(str, n);
    for(i = 0 ; i < n ; i++)
        g << str[i] << " ";
    return 0;
}