Cod sursa(job #2025381)

Utilizator alex.surdubobAlex Surdu alex.surdubob Data 22 septembrie 2017 17:27:17
Problema Sortare prin comparare Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int a[500005];
void merge(int, int, int);
void merge_sort(int low, int high)
{
    int mid;
    if(low < high)
    {
        mid = low + (high - low) / 2;
        merge_sort(low, mid);
        merge_sort(mid + 1, high);
        merge(low, mid, high);
    }
}
void merge(int low,int mid,int high)
{
    int h, i, j, b[50], k;
    h = low;
    i = low;
    j = mid + 1;

    while((h <= mid) && (j <= high))
    {
        if(a[h] <= a[j])
        {
            b[i] = a[h];
            h++;
        }
        else
        {
            b[i] = a[j];
            j++;
        }
        i++;
    }
    if(h > mid)
    {
        for(k = j; k <= high; k++)
        {
            b[i] = a[k];
            i++;
        }
    }
    else
    {
        for(k = h; k <= mid; k++)
        {
            b[i] = a[k];
            i++;
        }
    }
    for(k = low; k <= high; k++) a[k] = b[k];
}
int main()
{
    int num;
    fin >> num;

    for(int i = 0; i < num; i++)
    {
        fin >> a[i] ;
    }
    merge_sort(0, num - 1);


    for(int i = 0; i < num; i++)
    {
        fout << a[i] << ' ';
    }
    return 0;

}