Объединить два массива в третий массив, отсортированный по убыванию - 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; }
Объяснение кода листинга программы
- В функции
Merge
объединяются два массиваA1
иA2
в один массивR
. - Массив
R
имеет размерm=n1+n2
, гдеn1
иn2
- размеры массивовA1
иA2
соответственно. - Используется функция
calloc(m,sizeof(int))
для выделения памяти под массивR
. - Переменные
i
,j
,p
,m
,k
используются для контроля выхода из цикла и для индексации массивов. - В цикле
while(1)
происходит сравнение и копирование элементов из массивовA1
иA2
в массивR
. - Если
i==0
иj<n2
, то элементы массиваA2
копируются вR
с индексами отj
доn2-1
. - Если
j==(n2-1)
иi>=0
, то элементы массиваA1
копируются вR
с индексами отi
до0-1
. - Если
A1[i]
равноA2[j]
, то элемент копируется вR
с индексомp
. - Если
A1[i]
меньшеA2[j]
, то элементA2[j]
копируется вR
с индексомp
. - Если
A1[i]
большеA2[j]
, то элементA1[i]
копируется вR
с индексомp
. - После цикла возвращается массив
R
. - В функции
main
создаются массивыA1
иA2
, и вызывается функцияMerge
для их объединения. - Результат объединения выводится на экран с помощью цикла
for
и функцииprintf
. - Массив
R
освобождается с помощью функцииfree(R)
. - Команда
system(
PAUSE)
добавлена для остановки программы до нажатия клавишиENTER
. - Функция
main
возвращает0
, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д