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

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

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

Написать функцию, которая из двух массивов типа int, упорядоченных по убыванию, формирует новый массив двойной длины, упорядоченный по убыванию ( слияние ). Помогите разобраться!

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

textual
Листинг программы
#include <stdio.h>
#define AN 5
#define BN 9
#define CN (AN + BN)
 
int* array_union(const int* f1, const int* l1,
                 const int* f2, const int* l2, int* d){
    while((f1 != l1) && (f2 != l2)){
        if(*f1 > *f2)
            *d++ = *f1++;
        else if(*f1 < *f2)
            *d++ = *f2++;   
        else {
            *d++ = *f1++;
            ++f2;
        }
    }
 
    while(f1 != l1)
        *d++ = *f1++;
    while(f2 != l2)
        *d++ = *f2++;
    return d;
}
 
int main(void){
    int c[CN], *p, *e;
    int a[AN] = { 9, 7, 5, 3, -1 };
    int b[BN] = { 9, 8, 6, 4, 3, 2, 1, 0, -2 };
 
    e = array_union(a, a + AN, b, b + BN, c);
    for(p = &c[0]; p != e; ++p)
        printf("%d ", *p);
    return 0;
}

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

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

  1. Создаются две константы AN и BN, определяющие размер исходных массивов a и b соответственно.
  2. Определяется константа CN, которая равна сумме размеров массивов a и b.
  3. В функции array_union передаются указатели на начало и конец каждого из объединяемых массивов, а также указатель на начало результирующего массива.
  4. В функции происходит объединение элементов массивов в порядке возрастания. Для этого используется цикл while, который выполняется до тех пор, пока не будут использованы все элементы одного из массивов.
  5. В каждой итерации цикла проверяется, какой из текущих элементов больше. Если элемент из первого массива больше, то он добавляется в результирующий массив. Если элемент из второго массива больше, то он добавляется в результирующий массив. Если элементы равны, то они оба пропускаются, и следующий элемент из массива, в котором он меньше, добавляется в результирующий массив.
  6. После завершения объединения элементов массивов, в результирующий массив добавляются оставшиеся элементы из того массива, который был полностью использован.
  7. В функции main создается массив c, в который будет объединяться результат.
  8. Заполняются исходные массивы a и b.
  9. Результат объединения выводится на экран с помощью цикла for и функции printf.
  10. Возвращается 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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