• Предмет: Информатика
  • Автор: mikrob4928
  • Вопрос задан 3 месяца назад

C++
Придумать два массива натуральных чисел (первый – близки по значению и с повторениями, второй – далеки и без повторений). Построить средний алгоритм на C++ и выполнить сортировку придуманных двух массивов средним методом.
чем легче код тем лучше
(пожалуйста не списывайте с интернета, это очень важно)

Ответы

Ответ дал: yariksyharik2000
1

Ответ:

#include <iostream>

#include <algorithm>

using namespace std;

void middleSort(int arr1[], int n1, int arr2[], int n2) {

   // Сортировка первого массива

   sort(arr1, arr1 + n1);

   // Поиск среднего элемента второго массива

   int middle = arr2[n2 / 2];

   // Разделение второго массива на две части

   int left[n2], right[n2];

   int l = 0, r = 0;

   for (int i = 0; i < n2; i++) {

       if (arr2[i] < middle) {

           left[l] = arr2[i];

           l++;

       } else {

           right[r] = arr2[i];

           r++;

       }

   }

   // Сортировка левой части второго массива

   sort(left, left + l);

   // Сортировка правой части второго массива

   sort(right, right + r);

   // Слияние отсортированных массивов

   int i = 0, j = 0;

   while (i < n1 && j < l) {

       if (arr1[i] < left[j]) {

           i++;

       } else {

           swap(arr1[i], left[j]);

           j++;

       }

   }

   j = 0;

   while (i < n1 && j < r) {

       if (arr1[i] < right[j]) {

           i++;

       } else {

           swap(arr1[i], right[j]);

           j++;

       }

   }

   // Вставка оставшихся элементов из левой части второго массива

   while (j < l) {

       arr1[i] = left[j];

       i++;

       j++;

   }

   // Вставка оставшихся элементов из правой части второго массива

   while (j < r) {

       arr1[i] = right[j];

       i++;

       j++;

   }

}

int main() {

   // Создание двух массивов

   int arr1[] = {5, 2, 7, 1, 5, 8, 9, 3};

   int n1 = sizeof(arr1) / sizeof(arr1[0]);

   int arr2[] = {12, 5, 3, 7, 19, 8, 25, 31, 42};

   int n2 = sizeof(arr2) / sizeof(arr2[0]);

   // Сортировка средним методом

   middleSort(arr1, n1, arr2, n2);

   // Вывод отсортированных массивов

   for (int i = 0; i < n1; i++) {

       cout << arr1[i] << " ";

   }

   cout << endl;

   for (int i = 0; i < n2; i++) {

       cout << arr2[i] << " ";

   }

   cout << endl;

   return 0;

}

Объяснение:


mikrob4928: супер, спасибо. А как называется этот метод?
mikrob4928: этот код не работает(
Вас заинтересует