Объединение двух массивов - C (СИ)

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

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

Здравствуйте, нужна помощь с программой на Си. "Даны два массива х и y, элементы каждого из которых упорядочены по неубыванию. Объединить элементы этих двух массивов в один массив z, так, чтобы они снова оказались упорядоченными по неубыванию." Я её сделал, но её не приняли, так как я использовал сортировку пузырьком. Нужно без сортировок, используя факт того, что они изначально упорядочены по не убыванию. И элементы должны повторяться. Т.е. пусть А=1,2,3. B=1,2,3,4,5. Тогда С=1,1,2,2,3,3,4,5.

Решение задачи: «Объединение двух массивов»

textual
Листинг программы
#include <stdio.h>
#define SIZE(x)  (sizeof(x) / sizeof((x)[0]))
 
int main() {
    int a[] = {1,2,3};
    int b[] = {1,2,3,4,5};
    int c[SIZE(a) + SIZE(b)];
    int i = 0;
    int j = 0;
    int k = 0;
 
 
    while (i < SIZE(a) && j < SIZE(b)) {
        c[k++] = a[i] < b[j] ? a[i++] : b[j++];
    }
 
    while (i < SIZE(a)) c[k++] = b[i++];
    while (j < SIZE(b)) c[k++] = b[j++];
 
    for (i=0; i < SIZE(c); i++) printf("%d ", c[i]);
    printf("\n");
 
    return 0;
}

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

Объединение двух массивов:

  1. #include — подключаем стандартную библиотеку для работы с файлами и выводом данных
  2. #define SIZE(x)  (sizeof(x) / sizeof((x)[0])) — определяем размер массива x (количество элементов в нем)
  3. int main() { — функция main() является точкой входа в программу
  4. int a[] = {1,2,3}; — объявляем первый массив a с тремя элементами {1,2,3}
  5. int b[] = {1,2,3,4,5}; — объявляем второй массив b с пятью элементами {1,2,3,4,5}
  6. int c[SIZE(a) + SIZE(b)]; — объявляем третий массив c, который будет объединять элементы из a и b. Размер этого массива суммарный размер a и b.
  7. int i = 0; — объявляем переменную i для подсчета элементов в массиве a
  8. int j = 0; — объявляем переменную j для подсчета элементов в массиве b
  9. int k = 0; — объявляем переменную k для подсчета элементов в массиве c
  10. while (i < SIZE(a) && j < SIZE(b)) { — цикл while будет выполняться до тех пор, пока i меньше размера массива a и j меньше размера массива b
  11. c[k++] = a[i] < b[j] ? a[i++] : b[j++]; — добавляем в массив c элемент, который меньше (по умолчанию сравниваем первым элементом) и переходим к следующему элементу в массиве a и b
  12. while (i < SIZE(a)) c[k++] = b[i++]; — добавляем оставшиеся элементы из массива a в массив c
  13. while (j < SIZE(b)) c[k++] = b[j++]; — добавляем оставшиеся элементы из массива b в массив c
  14. for (i=0; i < SIZE(c); i++) printf(%d, c[i]); — выводим все элементы массива c через пробел
  15. printf(\n); — выводим символ новой строки
  16. return 0; — функция main() возвращает 0, что означает успешное выполнение программы
  17. В результате выполнения программы на экран будет выведен объединенный массив c: 1 2 3 4 5

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


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

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

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