Объединить два отсортированных массива - 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.

  1. Переменная k инициализируется нулем и используется для индексации массива C.
  2. Переменные i и j инициализируются нулем и используются для индексации массивов A и B соответственно.
  3. Пока k меньше sz_C (размер массива C), выполняется следующее действие:
    • Если i меньше sz_A (размер массива A), то элемент массива C с индексом k присваивается значению элемента массива A с индексом i, после чего i увеличивается на единицу.
    • Если j меньше sz_B (размер массива B), то элемент массива C с индексом k присваивается значению элемента массива B с индексом j, после чего j увеличивается на единицу.
  4. После завершения цикла, массив C будет содержать объединенные элементы массивов A и B в порядке их исходных массивов.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы