Cod sursa(job #2322651)

Utilizator HerddexJinga Tudor Herddex Data 18 ianuarie 2019 06:48:09
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>

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

void interclass(int s[], int first1, int last1, int first2, int last2)
{
    int *b = new int[last2 - first1 + 1];

    int i = first1, j = first2, k = 0;
    while(i <= last1 && j <= last2)
        if(s[i] < s[j])
            b[k++] = s[i++];
        else
            b[k++] = s[j++];

    while(i <= last1)
        b[k++] = s[i++];
    while(j <= last2)
        b[k++] = s[j++];

    for(int t = 0; t < k; t++)
        s[t + first1] = b[t];

    delete b;
    return;
}

void merge_sort(int s[], const int &first, const int &last)
{
    if(last - first <= 1)
    {
        if(s[last] < s[first])
        {
            int temp = s[first];
            s[first] = s[last];
            s[last] = temp;
        }
        return;
    }
    int middle = (first + last) / 2;
    merge_sort(s, first, middle);
    merge_sort(s, middle + 1, last);
    interclass(s, first, middle, middle + 1, last);
    return;
}

int main()
{
    int N;
    fin >> N;

    int *A = new int[500000];
    for(int i = 0; i < N; i++)
        fin >> A[i];

    merge_sort(A, 0, N-1);

    for(int i = 0; i < N; i++)
        fout << A[i] << ' ';

    delete A;
	fin.close();
	fout.close();
	return 0;
}