Cod sursa(job #1214792)

Utilizator flore77Simion Florentin flore77 Data 31 iulie 2014 13:37:31
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <iostream>
#include <fstream>
using namespace std;

int aux[500010];

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

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

        int i = 0, 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;
            }
        }
    }
}

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 << aux[i] << " ";
    return 0;
}