Cod sursa(job #1795163)

Utilizator DanFodorFODOR Dan Horatiu DanFodor Data 2 noiembrie 2016 01:13:38
Problema Sortare prin comparare Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include <iostream>
#include <fstream>
#include <queue>

using namespace std;

void merge_sort(int arr[], int left, int right)
{
    int middle = (left + right) / 2;

    // Splitting
    if (left < middle)
        merge_sort(arr, left, middle);
    if (middle+1 < right)
        merge_sort(arr, middle+1, right);

    // Merging
    queue<int> left_part;
    queue<int> right_part;
    for (int i = left; i <= middle; ++i)
        left_part.push(arr[i]);
    for (int i = middle+1; i <= right; ++i)
        right_part.push(arr[i]);
    int k = left;
    while (!left_part.empty() && !right_part.empty())
    {
        if (left_part.front() < right_part.front())
        {
            arr[k] = left_part.front();
            left_part.pop();
        }
        else
        {
            arr[k] = right_part.front();
            right_part.pop();
        }
        ++k;
    }

    while (!left_part.empty())
    {
        arr[k] = left_part.front();
        left_part.pop();
        ++k;
    }

    while (!right_part.empty())
    {
        arr[k] = right_part.front();
        right_part.pop();
        ++k;
    }
}

int main()
{
    ifstream cin("algsort.in");
    ofstream cout("algsort.out");

    int n;
    cin >> n;

    int a[n];
    for (int i = 0; i < n; ++i)
        cin >> a[i];

    merge_sort(a, 0, n-1);
    for (int i = 0; i < n; ++i)
        cout << a[i] << ' ';
    cout << '\n';
    return 0;
}