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