From d34b1f4339814acc03eeb49fc79d44eff4cc1d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=88=D0=B5=20=D0=98=D0=BC=D1=8F?= Date: Sat, 15 Nov 2025 04:12:54 -0500 Subject: [PATCH] =?UTF-8?q?=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20in?= =?UTF-8?q?sert=5Fsort=20=D0=B8=20merge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sort.c | 49 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/sort.c b/sort.c index 938780d..9787cb9 100644 --- a/sort.c +++ b/sort.c @@ -83,34 +83,33 @@ _merge(int *tmp, int *a, int *b, int *end) * Функция для слияния двух отсортированных массивов в один. */ - int *pa = a; // указатель на первый массив - int *pb = b; // указатель на второй массив - int *pt = tmp; // указатель на временный массив - int *end1 = b; // конец первого массива - int *end2 = end; // конец второго массива - - while (pa < end1 && pb < end2) { - if (*pa <= *pb) { - *pt++ = *pa++; - } else { - *pt++ = *pb++; + int a1 = 0, b1 = 0, tmp1 = 0; + int ra = b - a, rb = end - b; + while (ra > a1 && rb > b1) + { + if (a[a1] < b[b1]) + { + tmp[tmp1++] = a[a1++]; + } + else + { + tmp[tmp1++] = b[b1++]; + } + } + while (ra != a1) + { + tmp[tmp1] = a[a1]; + a1++; + tmp1++; + } + while (rb != b1) + { + tmp[tmp1] = b[b1]; + b1++; + tmp1++; } - } - - while (pa < end1) { - *pt++ = *pa++; - } - - while (pb < end2) { - *pt++ = *pb++; - } - - for (pt = tmp; a < end; ) { - *a++ = *pt++; - } } - static void _merge_sort_int(int *tmp, int *arr, size_t n) {