Слияние двух упорядоченных по убыванию массивов в один, упорядоченный по убыванию - C (СИ)
Формулировка задачи:
Даны два упорядоченных по убыванию массива W[n] и G[m]. Получите из них путем слияния упорядоченный по убыванию массив С; совпадающие элементы вставлять единожды. Подсчитайте количество элементов в массиве С.
Помогите,пожалуйста решить. совсем запуталась..
Решение задачи: «Слияние двух упорядоченных по убыванию массивов в один, упорядоченный по убыванию»
textual
Листинг программы
#include <stdio.h>
#define N 100
#define M 100
#define K (N+M)
void input(int ar[],int n);
int main (void)
{
int W[N],G[M],C[K];
int n,m,k=0,in=0,im=0,i;
printf("Enter a size of first array: ");
scanf("%d",&n);
input(W,n);
printf("Enter a size of second array: ");
scanf("%d",&m);
input(G,m);
while(in<n || im<m)
{
if(in==n)
while(im<m)
C[k++]=G[im++];
else if(im==m)
while(in<n)
C[k++]=W[in++];
else if(W[in]>G[im])
C[k++]=W[in++];
else if(W[in]<G[im])
C[k++]=G[im++];
else
{
C[k++]=G[im];
im++; in++;
}
}
printf("Size of new array: %d\nNew array: ",k);
for(i=0;i<k;i++)
printf("%d ",C[i]);
printf("\n");
return 0;
}
void input(int ar[],int n)
{
int i;
printf("Enter array: ");
for(i=0;i<n;i++)
scanf("%d",&ar[i]);
}
Объяснение кода листинга программы
Код решает задачу слияния двух упорядоченных по убыванию массивов в один, упорядоченный по убыванию.
- В начале программы объявляются три массива: W, G и C. Массив W содержит элементы первого массива, G - элементы второго массива, а C - результат слияния.
- Затем в функции main() пользователю предлагается ввести размер первого массива, затем второго.
- После этого вводятся элементы обоих массивов с помощью функции input().
- Затем начинается цикл, который выполняется до тех пор, пока не будут полностью заполнены массив C или пока не будут введены все элементы из массивов W и G.
- Внутри цикла сравниваются элементы массивов W и G. Если элемент массива W больше элемента массива G, то этот элемент массива W копируется в массив C. Если элемент массива W меньше элемента массива G, то этот элемент массива G копируется в массив C. Если элементы равны, то в массив C копируется элемент массива G, после чего индикаторы in и im увеличиваются на единицу.
- После завершения цикла выводится размер нового массива и все его элементы.
- В конце программы есть функция input(), которая используется для ввода элементов массивов W и G. Она просто запрашивает у пользователя ввод элементов массива и сохраняет их в массив.