Создать упорядоченный массив из двух исходных - 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; }
Объяснение кода листинга программы
В данном коде решается задача объединения двух массивов в один упорядоченный.
- Создаются две константы AN и BN, определяющие размер исходных массивов a и b соответственно.
- Определяется константа CN, которая равна сумме размеров массивов a и b.
- В функции array_union передаются указатели на начало и конец каждого из объединяемых массивов, а также указатель на начало результирующего массива.
- В функции происходит объединение элементов массивов в порядке возрастания. Для этого используется цикл while, который выполняется до тех пор, пока не будут использованы все элементы одного из массивов.
- В каждой итерации цикла проверяется, какой из текущих элементов больше. Если элемент из первого массива больше, то он добавляется в результирующий массив. Если элемент из второго массива больше, то он добавляется в результирующий массив. Если элементы равны, то они оба пропускаются, и следующий элемент из массива, в котором он меньше, добавляется в результирующий массив.
- После завершения объединения элементов массивов, в результирующий массив добавляются оставшиеся элементы из того массива, который был полностью использован.
- В функции main создается массив c, в который будет объединяться результат.
- Заполняются исходные массивы a и b.
- Результат объединения выводится на экран с помощью цикла for и функции printf.
- Возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д