Объединить два отсортированных массива - C (СИ) (79693)
Формулировка задачи:
Задача такая. "Заданы два упорядоченных по возрастанию массива. Составить из их значений третий, также упорядоченный по возрастанию (слияние)." Написал что называется в лоб все работает. Но преподу не понравилось что слишком много операций сравнения... заставил оптимизировать. Помогите пожалуйста.
#include <stdio.h>
#include <conio.h>
void main()
{
// объявление массивов и их размеров
const int sz_A=10, sz_B=6, sz_C=sz_A+sz_B;
short A[sz_A]={-10, -5, -1, 0, 1, 2, 4, 12, 13, 21};
short B[sz_B]={-10, 5, 6, 7, 8, 21}, C[sz_C];
int i=0, j=0, k=0; // переменные счетчики, для обращения к индексам массивов
for (k=0;k<sz_C;k++)
{
if (i<sz_A && j<sz_B) // проверка окончания какого-либо из двух массивов
{
if (A[i]<B[j]) // сравнение элементов массивов и помещение меньшего в третий массив
{
C[k]=A[i];
i++;
}
else
{
C[k]=B[j];
j++;
}
}
else
/* если какой-то из массивов закончился, заполнить конечный массив элементами
оставшегося */
{
for(;k<sz_C;k++){
if (i<sz_A){
C[k]=A[i]; i++;
}
if (j<sz_B){
C[k]=B[j]; j++;
}
}
}
}
// вывод результирующего массива
for (k=0; k<sz_C; k++){
printf("%d ", C[k]);
}
_getch();
}Решение задачи: «Объединить два отсортированных массива»
textual
Листинг программы
for(;k<sz_C;k++
{ if (i<sz_A)
{ C[k]=A[i];
i++; }
if (j<sz_B)
{ C[k]=B[j];
j++; }
Объяснение кода листинга программы
В данном коде происходит объединение двух отсортированных массивов A и B в один массив C.
- Переменная
kинициализируется нулем и используется для индексации массива C. - Переменные
iиjинициализируются нулем и используются для индексации массивов A и B соответственно. - Пока
kменьшеsz_C(размер массива C), выполняется следующее действие:- Если
iменьшеsz_A(размер массива A), то элемент массива C с индексомkприсваивается значению элемента массива A с индексомi, после чегоiувеличивается на единицу. - Если
jменьшеsz_B(размер массива B), то элемент массива C с индексомkприсваивается значению элемента массива B с индексомj, после чегоjувеличивается на единицу.
- Если
- После завершения цикла, массив C будет содержать объединенные элементы массивов A и B в порядке их исходных массивов.