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

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

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

Помогите пожалуйста закончить. В общем есть два массива, один отсортирован по возрастанию, второй по убыванию. Нужно объеденить эти два массива в третий массив, отсортированный по убыванию. Все сделал, все отсортировал, не могу создать третий массив, не получается. Смотрел решения на форуме. Помогите создать третий массив, хоть неотсортированный, хоть какой нибудь.
Листинг программы
  1. # define _CRT_SECURE_NO_WARNINGS
  2. # include <iostream>
  3. # include <stdio.h>
  4. # include <time.h>
  5. # include <windows.h>
  6. # include <conio.h>
  7. # define FALSE 0
  8. # define TRUE 1
  9. using namespace std;
  10. void array(int *arr,int n);
  11. void array1(int *arr1, int k);
  12. void bubbleSort(int* arrPtr, int length_arr);
  13. void bubbleSort1(int* arrPtr, int length_arr);
  14.  
  15. int main()
  16. { SetConsoleCP(1251);
  17. SetConsoleOutputCP(1251);
  18. srand(time(NULL));
  19. int done = FALSE;
  20. char c;
  21. int n,k;
  22. printf("введите размер 1-го массива:\n");
  23. scanf("%d",&n);
  24. int *arr = new int[n];
  25. for( int i=0;i<n;i++)
  26. {
  27. arr[i]= rand()%100-50;
  28. }
  29. printf("Введите размер 2-го массива\n");
  30. scanf("%d",&k);
  31. int *arr1 = new int [k];
  32. for( int j=0;j<k;j++)
  33. {
  34. arr1[j]= rand()%100-50;
  35. }
  36. //int *result = new int [n+k];
  37. while (!done) {
  38. printf("Меню:\n"
  39. "1) Показать массив №1\n"
  40. "2) Показать массив №2\n"
  41. "3) Показать отсортированный массив\n"
  42. "4) Завершение программы\n");
  43. c = _getch();
  44. switch (toupper(c)) {
  45. case '1':
  46. array(arr,n);
  47. break;
  48. case '2':
  49. array1(arr1,k);
  50. break;
  51. case '3':
  52. break;
  53. case '4':
  54. done = TRUE;
  55. break;
  56. default:
  57. printf("\n\aНекорректный ввод!\n");
  58. }
  59. }
  60. return 0;
  61. }
  62. void array(int *arr, int n)
  63. { int i;
  64. for(i=0;i<n;i++)
  65. {
  66. printf(" %d",arr[i]);
  67. }
  68. printf("\n");
  69. bubbleSort(arr, n);
  70. printf("\nОтсоритрованный массив №1\n");
  71. for(int i = 0; i < n; i++)
  72. {
  73. printf(" %d",arr[i]);
  74. }
  75. printf("\n");
  76. }
  77. void array1(int *arr1, int k)
  78. { int j;
  79. for(j=0;j<k;j++)
  80. {
  81. printf(" %d",arr1[j]);
  82. }
  83. printf("\n");
  84. bubbleSort1(arr1, k);
  85. printf("\nОтсоритрованный массив №2\n");
  86. for(int j = 0; j < k; j++)
  87. {
  88. printf(" %d",arr1[j]);
  89. }
  90. printf("\n");
  91. }
  92.  
  93. void bubbleSort(int* arrPtr, int length_arr)
  94. {
  95. int temp = 0;
  96. bool exit= false;
  97. while(!exit)
  98. {
  99. exit= true;
  100. for(int count = 0; count< (length_arr - 1); count++)
  101. if(arrPtr[count] >arrPtr[count + 1])
  102. {
  103. temp = arrPtr[count];
  104. arrPtr[count] = arrPtr[count + 1];
  105. arrPtr[count + 1] = temp;
  106. exit= false;
  107. }
  108. }
  109. }
  110. void bubbleSort1(int* arrPtr, int length_arr)
  111. {
  112. int temp = 0;
  113. bool exit= false;
  114. while(!exit)
  115. {
  116. exit= true;
  117. for(int count = 0; count< (length_arr - 1); count++)
  118. if(arrPtr[count] <arrPtr[count + 1])
  119. {
  120. temp = arrPtr[count];
  121. arrPtr[count] = arrPtr[count + 1];
  122. arrPtr[count + 1] = temp;
  123. exit= false;
  124. }
  125. }
  126. }
Еще забыл добавить, что третий массив не должен содержать одинаковых элементов

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

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4.  
  5. int *Merge(int *A1, int n1, int *A2, int n2)
  6. {
  7.     int *R;
  8.     int i,j,p,m,k;
  9.     m=n1+n2;
  10.     R=(int *) calloc(m,sizeof(int));
  11.     i=n1-1;
  12.     j=0;
  13.     p=0;
  14.     while (1)
  15.     {
  16.           if (i==0)
  17.           {
  18.              for (k=j; j<n2; j++) R[p++]=A2[j];
  19.              break;
  20.           }              
  21.          
  22.           if (j==(n2-1))
  23.           {
  24.             for (k=i; i>=0; i--) R[p++]=A1[i];
  25.             break;
  26.           }  
  27.          
  28.           if (A1[i]==A2[j])
  29.              {R[p++]=A1[i]; i--; j++;}
  30.           else  
  31.              if (A1[i]<A2[j])  
  32.                 R[p++]=A2[j++];
  33.              else
  34.                 R[p++]=A1[i--];
  35.     }
  36.     return R;
  37. }        
  38.  
  39. int main(int argc, char *argv[])
  40. {
  41.  
  42.   int A1[5]={1,2,3,4,5};
  43.   int A2[7]={10,9,8,7,6,5,4};
  44.   int *R,i;
  45.  
  46.   R=Merge(A1,5,A2,7);
  47.   for (i=0; i<12; i++) printf("%d ",R[i]);
  48.   printf("\n");
  49.   free(R);
  50.  
  51.   system("PAUSE"); 
  52.   return 0;
  53. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы