Два упорядоченных по убыванию массива записать в третий - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ввести два упорядоченных по убыванию массива. С помощью функции занести их в третий, упорядоченный по возрастанию. Сортировки не использовать.

Решение задачи: «Два упорядоченных по убыванию массива записать в третий»

textual
Листинг программы
#include <stdio.h>
 
void reverse_merge(int * dst, int * srcA, size_t sizeA, int * srcB, size_t sizeB) {
    if ( ! sizeA ) {
        if ( ! sizeB )
            return;
        *dst++ = srcB[--sizeB];
    }
    else if ( ! sizeB )
        *dst++ = srcA[--sizeA];
    else if ( srcA[sizeA - 1] < srcB[sizeB - 1] )
        *dst++ = srcA[--sizeA];
    else
        *dst++ = srcB[--sizeB];
    
    reverse_merge(dst, srcA, sizeA, srcB, sizeB);
}
 
void dump(const int * arr, size_t cnt) {
    while ( cnt-- )
        printf("%d%c", *arr++, ( cnt ) ? ' ' : '\n');
}
 
#define SIZE (10)
 
int main(void) {
    int A[SIZE] = { 39, 35, 34, 31, 28, 25, 24, 21, 19, 15 };
    int B[SIZE] = { 44, 40, 37, 31, 28, 23, 22, 20, 17, 17 }; 
    int C[SIZE * 2];
    
    reverse_merge(C, A, SIZE, B, SIZE);
    printf("A: ");
    dump(A, SIZE);
    printf("B: ");
    dump(B, SIZE);
    printf("C: ");
    dump(C, SIZE * 2);
    
    return 0;
}

Объяснение кода листинга программы

В данном коде решается задача объединения двух упорядоченных по убыванию массивов в один.

  1. Создаются три массива: A, B и C. Массивы A и B содержат элементы, которые необходимо упорядочить. Массив C будет результатом объединения.
  2. В функции reverse_merge происходит объединение массивов. Она принимает три параметра:
    • dst - указатель на первый элемент результирующего массива.
    • srcA - указатель на первый элемент первого массива.
    • sizeA - размер первого массива.
    • srcB - указатель на первый элемент второго массива.
    • sizeB - размер второго массива. Внутри функции происходит итеративное объединение массивов. Если один из массивов закончился (sizeA или sizeB равны 0), то все оставшиеся элементы копируются из другого массива. Если элементы в обоих массивах равны, то выбирается элемент из левого массива. Если элементы не равны, то выбирается элемент из правого массива.
  3. В функции dump происходит вывод содержимого массива на экран. Она принимает два параметра:
    • arr - указатель на первый элемент массива.
    • cnt - количество элементов массива. Внутри функции происходит итеративное выведение элементов массива на экран. Если элемент равен 0, то выводится символ новой строки.
  4. В функции main создаются два массива: A и B. Значения элементов массивов задаются вручную.
  5. Создается массив C размером SIZE * 2.
  6. Вызывается функция reverse_merge, передавая в нее указатель на первый элемент массива C, указатель на первый элемент массива A и размер массива A, указатель на первый элемент массива B и размер массива B.
  7. Выводятся значения массивов A, B и C.
  8. Программа возвращает 0, что означает успешное выполнение.

Оцени полезность:

13   голосов , оценка 3.615 из 5
Похожие ответы