Cod sursa(job #1009080)

Utilizator lucianRRuscanu Lucian lucianR Data 12 octombrie 2013 13:57:05
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#define N_MAX 800

using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");

int numbers[N_MAX], N, temp[N_MAX];

void mergev(int left, int mid, int right)
{
    int no, t;
    t = left;
    no = right - left + 1;
    while ((left <= mid - 1) && (mid <= right))
    {
        if (numbers[left] <= numbers[mid])
            temp[t++] = numbers[left++];
        else
            temp[t++] = numbers[mid++];
    }
    while (left <= mid - 1)                        //daca a mai ramas ceva in vreun subsir se adauga tot
        temp[t++] = numbers[left++];
    while (mid <= right)
        temp[t++] = numbers[mid++];
    for (int i = 0; i <= no; i++)
        numbers[right] = temp[right--];
}

void msort(int left, int right)
{
    int mid;
    if (right > left)
    {
        mid = (right + left) / 2;
        msort(left, mid);
        msort(mid+1, right);
        mergev(left, mid+1, right);
    }
}

int main()
{
    in >> N;
    for(int i = 1; i <= N; i++)
        in >> numbers[i];
    msort(1, N);
    for(int i = 1; i <= N; i++)
        cout << numbers[i] << " ";
    in.close();
    out.close();
    return 0;
}