#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// Функция для слияния двух половин массива
void merge(int arr[], int left, int mid, int right) {
int i, j, k;
int n1 = mid - left + 1;
int n2 = right - mid;
// Динамическое выделение памяти для временных массивов
int* L = (int*)malloc(n1 * sizeof(int));
int* R = (int*)malloc(n2 * sizeof(int));
// Копируем данные во временные массивы
for (i = 0; i < n1; i++)
L[i] = arr[left + i];
for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
// Слияние временных массивов обратно в arr[left..right]
i = 0; // Индекс первого подмассива
j = 0; // Индекс второго подмассива
k = left; // Индекс объединенного подмассива
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
// Копируем оставшиеся элементы L[], если они есть
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
// Копируем оставшиеся элементы R[], если они есть
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
// Освобождаем выделенную память
free(L);
free(R);
}
// Рекурсивная функция сортировки слиянием
void mergeSort(int arr[], int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
// Сортируем первую и вторую половины
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
// Слияние отсортированных половин
merge(arr, left, mid, right);
}
}
// Вспомогательная функция для вывода массива
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// Основная функция
int main() {
setlocale(LC_ALL, "Russian");
int arr[] = { 12, 11, 13, 5, 6, 7 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
printf("Исходный массив:\n");
printArray(arr, arr_size);
mergeSort(arr, 0, arr_size - 1);
printf("Отсортированный массив:\n");
printArray(arr, arr_size);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGxvY2FsZS5oPgoKLy8g0KTRg9C90LrRhtC40Y8g0LTQu9GPINGB0LvQuNGP0L3QuNGPINC00LLRg9GFINC/0L7Qu9C+0LLQuNC9INC80LDRgdGB0LjQstCwCnZvaWQgbWVyZ2UoaW50IGFycltdLCBpbnQgbGVmdCwgaW50IG1pZCwgaW50IHJpZ2h0KSB7CiAgICBpbnQgaSwgaiwgazsKICAgIGludCBuMSA9IG1pZCAtIGxlZnQgKyAxOwogICAgaW50IG4yID0gcmlnaHQgLSBtaWQ7CgogICAgLy8g0JTQuNC90LDQvNC40YfQtdGB0LrQvtC1INCy0YvQtNC10LvQtdC90LjQtSDQv9Cw0LzRj9GC0Lgg0LTQu9GPINCy0YDQtdC80LXQvdC90YvRhSDQvNCw0YHRgdC40LLQvtCyCiAgICBpbnQqIEwgPSAoaW50KiltYWxsb2MobjEgKiBzaXplb2YoaW50KSk7CiAgICBpbnQqIFIgPSAoaW50KiltYWxsb2MobjIgKiBzaXplb2YoaW50KSk7CgogICAgLy8g0JrQvtC/0LjRgNGD0LXQvCDQtNCw0L3QvdGL0LUg0LLQviDQstGA0LXQvNC10L3QvdGL0LUg0LzQsNGB0YHQuNCy0YsKICAgIGZvciAoaSA9IDA7IGkgPCBuMTsgaSsrKQogICAgICAgIExbaV0gPSBhcnJbbGVmdCArIGldOwogICAgZm9yIChqID0gMDsgaiA8IG4yOyBqKyspCiAgICAgICAgUltqXSA9IGFyclttaWQgKyAxICsgal07CgogICAgLy8g0KHQu9C40Y/QvdC40LUg0LLRgNC10LzQtdC90L3Ri9GFINC80LDRgdGB0LjQstC+0LIg0L7QsdGA0LDRgtC90L4g0LIgYXJyW2xlZnQuLnJpZ2h0XQogICAgaSA9IDA7IC8vINCY0L3QtNC10LrRgSDQv9C10YDQstC+0LPQviDQv9C+0LTQvNCw0YHRgdC40LLQsAogICAgaiA9IDA7IC8vINCY0L3QtNC10LrRgSDQstGC0L7RgNC+0LPQviDQv9C+0LTQvNCw0YHRgdC40LLQsAogICAgayA9IGxlZnQ7IC8vINCY0L3QtNC10LrRgSDQvtCx0YrQtdC00LjQvdC10L3QvdC+0LPQviDQv9C+0LTQvNCw0YHRgdC40LLQsAogICAgd2hpbGUgKGkgPCBuMSAmJiBqIDwgbjIpIHsKICAgICAgICBpZiAoTFtpXSA8PSBSW2pdKSB7CiAgICAgICAgICAgIGFycltrXSA9IExbaV07CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGFycltrXSA9IFJbal07CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgaysrOwogICAgfQoKICAgIC8vINCa0L7Qv9C40YDRg9C10Lwg0L7RgdGC0LDQstGI0LjQtdGB0Y8g0Y3Qu9C10LzQtdC90YLRiyBMW10sINC10YHQu9C4INC+0L3QuCDQtdGB0YLRjAogICAgd2hpbGUgKGkgPCBuMSkgewogICAgICAgIGFycltrXSA9IExbaV07CiAgICAgICAgaSsrOwogICAgICAgIGsrKzsKICAgIH0KCiAgICAvLyDQmtC+0L/QuNGA0YPQtdC8INC+0YHRgtCw0LLRiNC40LXRgdGPINGN0LvQtdC80LXQvdGC0YsgUltdLCDQtdGB0LvQuCDQvtC90Lgg0LXRgdGC0YwKICAgIHdoaWxlIChqIDwgbjIpIHsKICAgICAgICBhcnJba10gPSBSW2pdOwogICAgICAgIGorKzsKICAgICAgICBrKys7CiAgICB9CgogICAgLy8g0J7RgdCy0L7QsdC+0LbQtNCw0LXQvCDQstGL0LTQtdC70LXQvdC90YPRjiDQv9Cw0LzRj9GC0YwKICAgIGZyZWUoTCk7CiAgICBmcmVlKFIpOwp9CgovLyDQoNC10LrRg9GA0YHQuNCy0L3QsNGPINGE0YPQvdC60YbQuNGPINGB0L7RgNGC0LjRgNC+0LLQutC4INGB0LvQuNGP0L3QuNC10LwKdm9pZCBtZXJnZVNvcnQoaW50IGFycltdLCBpbnQgbGVmdCwgaW50IHJpZ2h0KSB7CiAgICBpZiAobGVmdCA8IHJpZ2h0KSB7CiAgICAgICAgaW50IG1pZCA9IGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDI7CgogICAgICAgIC8vINCh0L7RgNGC0LjRgNGD0LXQvCDQv9C10YDQstGD0Y4g0Lgg0LLRgtC+0YDRg9GOINC/0L7Qu9C+0LLQuNC90YsKICAgICAgICBtZXJnZVNvcnQoYXJyLCBsZWZ0LCBtaWQpOwogICAgICAgIG1lcmdlU29ydChhcnIsIG1pZCArIDEsIHJpZ2h0KTsKCiAgICAgICAgLy8g0KHQu9C40Y/QvdC40LUg0L7RgtGB0L7RgNGC0LjRgNC+0LLQsNC90L3Ri9GFINC/0L7Qu9C+0LLQuNC9CiAgICAgICAgbWVyZ2UoYXJyLCBsZWZ0LCBtaWQsIHJpZ2h0KTsKICAgIH0KfQoKLy8g0JLRgdC/0L7QvNC+0LPQsNGC0LXQu9GM0L3QsNGPINGE0YPQvdC60YbQuNGPINC00LvRjyDQstGL0LLQvtC00LAg0LzQsNGB0YHQuNCy0LAKdm9pZCBwcmludEFycmF5KGludCBhcnJbXSwgaW50IHNpemUpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgIHByaW50ZigiJWQgIiwgYXJyW2ldKTsKICAgIHByaW50ZigiXG4iKTsKfQoKLy8g0J7RgdC90L7QstC90LDRjyDRhNGD0L3QutGG0LjRjwppbnQgbWFpbigpIHsKICAgIHNldGxvY2FsZShMQ19BTEwsICJSdXNzaWFuIik7CiAgICBpbnQgYXJyW10gPSB7IDEyLCAxMSwgMTMsIDUsIDYsIDcgfTsKICAgIGludCBhcnJfc2l6ZSA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7CgogICAgcHJpbnRmKCLQmNGB0YXQvtC00L3Ri9C5INC80LDRgdGB0LjQsjpcbiIpOwogICAgcHJpbnRBcnJheShhcnIsIGFycl9zaXplKTsKCiAgICBtZXJnZVNvcnQoYXJyLCAwLCBhcnJfc2l6ZSAtIDEpOwoKICAgIHByaW50Zigi0J7RgtGB0L7RgNGC0LjRgNC+0LLQsNC90L3Ri9C5INC80LDRgdGB0LjQsjpcbiIpOwogICAgcHJpbnRBcnJheShhcnIsIGFycl9zaXplKTsKCiAgICByZXR1cm4gMDsKfQ==