Объединить два массива в третий массив, отсортированный по убыванию - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста закончить. В общем есть два массива, один отсортирован по возрастанию, второй по убыванию. Нужно объеденить эти два массива в третий массив, отсортированный по убыванию. Все сделал, все отсортировал, не могу создать третий массив, не получается. Смотрел решения на форуме. Помогите создать третий массив, хоть неотсортированный, хоть какой нибудь.
# define _CRT_SECURE_NO_WARNINGS
 
# include <iostream>
# include <stdio.h>
# include <time.h>
# include <windows.h>
# include <conio.h>
 
# define FALSE 0
# define TRUE 1
 
using namespace std;
 
void array(int *arr,int n);
void array1(int *arr1, int k);
void bubbleSort(int* arrPtr, int length_arr);
void bubbleSort1(int* arrPtr, int length_arr); 

int main()
{    SetConsoleCP(1251);
     SetConsoleOutputCP(1251);
     srand(time(NULL));
     int done = FALSE;
     char c;
     int n,k;
     printf("введите размер 1-го массива:\n");
     scanf("%d",&n);
     int *arr = new int[n];
     for( int i=0;i<n;i++)
             {
              arr[i]= rand()%100-50;
             }
 
    printf("Введите размер 2-го массива\n");
    scanf("%d",&k);
       int *arr1 = new int [k];
          for( int j=0;j<k;j++)
          {
            arr1[j]= rand()%100-50;
          }
 
//int *result = new int [n+k];
 
  while (!done) {
        printf("Меню:\n"
            "1) Показать массив №1\n"
            "2) Показать массив №2\n"
            "3) Показать отсортированный массив\n"
            "4) Завершение программы\n");
 
        c = _getch();
        switch (toupper(c)) {
        case '1':
            array(arr,n);
            break;
        case '2':
            array1(arr1,k);
            break;
        case '3':
 
            break;
        case '4':
            done = TRUE;
            break;
        default:
            printf("\n\aНекорректный ввод!\n");
        }
  }
 return 0;
}
void array(int *arr, int n)
{  int i;
          for(i=0;i<n;i++)
          {
              printf(" %d",arr[i]);
          }
      printf("\n");
 
      bubbleSort(arr, n);
 
      printf("\nОтсоритрованный массив №1\n");
         for(int i = 0; i < n; i++)
            {
               printf(" %d",arr[i]);
            }
     printf("\n");
}
 
void array1(int *arr1, int k)
{   int j;
          for(j=0;j<k;j++)
          {
            printf(" %d",arr1[j]);
          }
      printf("\n");
 
      bubbleSort1(arr1, k);
 
      printf("\nОтсоритрованный массив №2\n");
         for(int j = 0; j < k; j++)
            {
               printf(" %d",arr1[j]);
            }
     printf("\n");
}

void bubbleSort(int* arrPtr, int length_arr) 
   {
      int temp = 0; 
      bool exit= false; 
      while(!exit) 
      {
         exit= true;
         for(int count = 0; count< (length_arr - 1); count++)
         if(arrPtr[count] >arrPtr[count + 1]) 
         {
            temp = arrPtr[count];
            arrPtr[count] = arrPtr[count + 1];
            arrPtr[count + 1] = temp;
            exit= false; 
         }
      }
    } 
void bubbleSort1(int* arrPtr, int length_arr) 
   {
      int temp = 0; 
      bool exit= false; 
      while(!exit) 
      {
         exit= true;
         for(int count = 0; count< (length_arr - 1); count++)
         if(arrPtr[count] <arrPtr[count + 1]) 
         {
            temp = arrPtr[count];
            arrPtr[count] = arrPtr[count + 1];
            arrPtr[count + 1] = temp;
            exit= false; 
         }
      }
    }
Еще забыл добавить, что третий массив не должен содержать одинаковых элементов

Решение задачи: «Объединить два массива в третий массив, отсортированный по убыванию»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
int *Merge(int *A1, int n1, int *A2, int n2)
{
    int *R;
    int i,j,p,m,k;
    m=n1+n2;
    R=(int *) calloc(m,sizeof(int));
    i=n1-1;
    j=0;
    p=0;
    while (1)
    {
          if (i==0)
          {
             for (k=j; j<n2; j++) R[p++]=A2[j];
             break;
          }              
          
          if (j==(n2-1))
          {
            for (k=i; i>=0; i--) R[p++]=A1[i];
            break;
          }  
          
          if (A1[i]==A2[j]) 
             {R[p++]=A1[i]; i--; j++;}
          else   
             if (A1[i]<A2[j])  
                R[p++]=A2[j++]; 
             else
                R[p++]=A1[i--];
    }
    return R;
}         
 
int main(int argc, char *argv[])
{
 
  int A1[5]={1,2,3,4,5};
  int A2[7]={10,9,8,7,6,5,4};
  int *R,i;
  
  R=Merge(A1,5,A2,7);
  for (i=0; i<12; i++) printf("%d ",R[i]);
  printf("\n");
  free(R);
 
  system("PAUSE");  
  return 0;
}

Объяснение кода листинга программы

  1. В функции Merge объединяются два массива A1 и A2 в один массив R.
  2. Массив R имеет размер m=n1+n2, где n1 и n2 - размеры массивов A1 и A2 соответственно.
  3. Используется функция calloc(m,sizeof(int)) для выделения памяти под массив R.
  4. Переменные i, j, p, m, k используются для контроля выхода из цикла и для индексации массивов.
  5. В цикле while(1) происходит сравнение и копирование элементов из массивов A1 и A2 в массив R.
  6. Если i==0 и j<n2, то элементы массива A2 копируются в R с индексами от j до n2-1.
  7. Если j==(n2-1) и i>=0, то элементы массива A1 копируются в R с индексами от i до 0-1.
  8. Если A1[i] равно A2[j], то элемент копируется в R с индексом p.
  9. Если A1[i] меньше A2[j], то элемент A2[j] копируется в R с индексом p.
  10. Если A1[i] больше A2[j], то элемент A1[i] копируется в R с индексом p.
  11. После цикла возвращается массив R.
  12. В функции main создаются массивы A1 и A2, и вызывается функция Merge для их объединения.
  13. Результат объединения выводится на экран с помощью цикла for и функции printf.
  14. Массив R освобождается с помощью функции free(R).
  15. Команда system(PAUSE) добавлена для остановки программы до нажатия клавиши ENTER.
  16. Функция main возвращает 0, что означает успешное выполнение программы.

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


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

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

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