Cod sursa(job #2063943)

Utilizator alexb97Alexandru Buhai alexb97 Data 11 noiembrie 2017 17:18:33
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <iostream>
#include <fstream>
using namespace std;

ifstream is("algsort.in");
ofstream os("algsort.out");


void merge(int arr[], int left, int middle, int right)
{
   
    int len1 = middle - left +1;
    int len2 = right - middle;

    int L[len1];
    int R[len2];

    for (int i = 0; i < len1; i++)
    {
		L[i] = arr[left+i];
	}

    for (int j = 0; j < len2; j++)
    {    
		R[j] = arr[middle+1+j];
	}
    
	int i = 0, j = 0;
    int k = left;
    while( i < len1 && j < len2)
    {
        if(L[i] <= R[j])
        {
            arr[k] = L[i];
            i++;
        }
        else
        {
            arr[k] = R[j];
            j++;
        }
        k++;
    }
    while(i < len1)
    {
        arr[k] = L[i];    i++;    k++;
    }
    while(j < len2)
    {
        arr[k] = R[j];    j++;    k++;
	}

}


void mergeSort(int arr[], int left, int right)
{
    if(left >= right)
		return;	
	int middle = left + (right-left)/2;
	mergeSort(arr, left, middle);
	mergeSort(arr, middle+1, right);
	merge(arr, left, middle, right);
}

int arr[500001];
 
int main()
{
    int n;
    is >> n;
    for (int i = 0; i < n; i++)
        is >> arr[i];
    mergeSort(arr, 0, n-1);
    for(int i = 0; i < n; ++i)
        os << arr[i] << " ";
    is.close();
    os.close();
    return 0;

}