Cod sursa(job #1215538)

Utilizator flore77Simion Florentin flore77 Data 1 august 2014 12:36:22
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.58 kb
#include <iostream>
#include <fstream>
using namespace std;

int aux[500010];

void swap (int &a, int &b)
{
    int aux = a;
    a = b;
    b = aux;
}

void interclasare (int v[], int st, int dr)
{
    int mid = (st + dr) / 2;
    int i = st, j = mid + 1, ind = 0;
    while (i <= mid && j <= dr)
    {
        if (v[i] < v[j])
        {
            aux[ind] = v[i];
            ++i;
            ++ind;
        }
        else
        {
            aux[ind] = v[j];
            ++j;
            ++ind;
        }
    }

    /*if (i <= mid)
    {
        for (j = i; j <= mid; ++j)
        {
            aux[ind] = v[j];
            ++ind;
        }
    }
    else
    {
        for (i = j; i <= dr; i++)
        {
            aux[ind] = v[i];
            ++ind;
        }
    }*/
    while (i <= mid)
        aux[ind++] = v[i++];
    while (j <= dr)
        aux[ind++] = v[j++];
    for (i = st, j = 0; i <= dr; ++i, ++j)
        v[i] = aux[j];
}

void mergeSort (int v[], int st, int dr)
{
    if (dr - st <= 1)
    {
        if (v[st] > v[dr])
            swap(v[st], v[dr]);
        return;
    }
    int mid = (st + dr) / 2;
    mergeSort(v, st, mid);
    mergeSort(v, mid + 1, dr);
    interclasare(v, st, dr);
}

int main()
{
    ifstream in("algsort.in");
    int n, i, *v;
    in >> n;
    v = new int[n];
    for (i = 0; i < n; i++)
        in >> v[i];
    in.close();
    mergeSort(v, 0, n - 1);
    ofstream out("algsort.out");
    for (i = 0; i < n; i++)
        out << v[i] << " ";
    out.close();
    return 0;
}