Создать упорядоченный массив из двух исходных - 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, что означает успешное выполнение программы.