Объединить два отсортированных массива - 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 в порядке их исходных массивов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д