Cod sursa(job #2053920)

Utilizator daniela12Sandu Daniela Teodora daniela12 Data 1 noiembrie 2017 15:31:52
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int v[500040], n;
void citire()
{
    int i;
    f>>n;
    for(i=1;i<=n;++i)
        f>>v[i];
    f.close();
}
void afisare()
{
    int i;
    for(i=1;i<=n;++i)
        g<<v[i]<<" ";
    g<<endl;
    g.close();
}
void mergee(int x[], int p, int mid, int q)
{
    int i, j, k;
    int n1 = mid - p+ 1;
    int n2 =  q- mid;
    int L[n1], R[n2];
    for (i = 0; i < n1; i++)
        L[i] = x[p+ i];
    for (j = 0; j < n2; j++)
        R[j] = x[mid + 1+ j];
    i = 0; j = 0; k = p;
    while (i < n1 && j < n2)
    {
        if (L[i] <= R[j])
        {
            x[k] = L[i];
            i++;
        }
        else
        {
            x[k] = R[j];
            j++;
        }
        k++;
    }
    while (i < n1)
    {
        x[k] = L[i];
        i++;
        k++;
    }
    while (j < n2)
    {
        x[k] = R[j];
        j++;
        k++;
    }
}

void merge_sort( int p, int q)
{
    if(p<q)
    {
        int mid=(p+q)/2;
        merge_sort(p, mid);
        merge_sort( mid+1, q);
        mergee(v, p, mid, q);
    }
}

int main()
{
    citire();
    merge_sort(1,n);
    afisare();
}