#include "sort_.h"
void print_array(int *arr, int n)
{
    if(n==0){
        printf("ERROR: Array length is ZERO\n");
        return;
    }
    printf("%d", arr[0]);
    for (int i=1; i<n; i++) {
        printf(" %d", arr[i]);
    }
    printf("\n");
}
int* merge_array(int *arr1, int n1, int* arr2, int n2)
{
 
 int* res;
    res = new int[n1 + n2];
    int a1 = 0, a2 = 0;
    int index = 0;
    for (int i = 0; i < n1+n2; i++) {
        if (i < n1) {
            res[i] = arr1[i];
        }
        else {
            res[i] = arr2[i - n1];
        }
    }
    sort(res, res + n1 + n2);
    return res;
    
    
}
int* merge_sort(int *arr, int n)
{
    int mid = n / 2;
    if (mid > 0) {
        int* arr1 = new int[mid];
        int n1 = mid;
        int n2 = n - mid;
        int* arr2 = new int[n2];
        for (int i = 0; i < n; i++) {
            if (i < mid) {
                arr1[i] = arr[i];
            }
            else {
                arr2[i - mid] = arr[i];
            }
        }
        merge_sort(arr1, n1);   
        merge_sort(arr2, n - mid);     
        merge_array(arr1, n1, arr2, n2);
    }
    else
    {
        return  merge_array(arr, n, NULL, 0);
    }
}