Написал сортировку слиянием, но она выдает неправильный ответ, если на вход поступает больше 5 чисел

#include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;

int n;

void Merge(int *array, int begin, int end) {  // Слияние массивов
    int temp_arr[n];
    int i = begin;

    int midl = begin + (end - begin) / 2;
    int j = midl + 1;
    int k = 0;
    
    while (i <= midl && j <= end) {
        if (array[i] < array[j]) {
            temp_arr[k] = array[i];
            i++;
            k++;
        } else {
            temp_arr[k] = array[j];
            j++;
            k++;
        }
    }

    while (i <= midl) {
        temp_arr[k] = array[i];
        i++;
        k++;
    }

    while (j <= end) {
        temp_arr[k] = array[j];
        j++;
        k++;
    }

    for (int s = begin; s <= end; s++){
        array[s] = temp_arr[s];
    }
}


void SortMerge(int *arr, int begin, int end) { // Разбиение массива
    int temp;
    if ((end - begin) == 0) {
        return;
    }

    if ((end - begin) == 1) {  // Сравнение элементов в двухэлементных подмассивах
        if (arr[end] < arr[begin]) {
            temp = arr[begin];
            arr[begin] = arr[end];
            arr[end] = temp;
        }
    } else {
        int midl = begin + (end - begin) / 2;
        SortMerge(arr, begin, midl);    // Рекурсия
        SortMerge(arr, midl + 1, end);
        Merge(arr, begin, end);
    }
}


int main() {
    ifstream file;
    file.open("sort.in");


    /*if (!file){
        cout<<"File Eror";
        return -1;
    }else {
        cout << "OK";
        return 0;
    }*/

    file >> n;
    int input_array[n]; // Количесво чисел

    for (int i = 0; i < n; i++) {  // Заполнение массива числами из файла
        int number;
        file >> number;
        input_array[i] = number;

    }

    int last_index = n-1;

    SortMerge(input_array, 0, last_index);

    for (int i = 0; i < n; i++) { // Вывод отсортированного массива
        cout << input_array[i];
    }
    return 0;

}

Ответы (1 шт):

Автор решения: MBo

Вы не из того места временного массива забираете данные после слияния. Похоже, надо так:

for (int s = begin; s <= end; s++){
       array[s] = temp_arr[s - begin];
→ Ссылка