Написал сортировку слиянием, но она выдает неправильный ответ, если на вход поступает больше 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];