C++
Придумать два массива натуральных чисел (первый – близки по значению и с повторениями, второй – далеки и без повторений). Построить средний алгоритм на C++ и выполнить сортировку придуманных двух массивов средним методом.
чем легче код тем лучше
(пожалуйста не списывайте с интернета, это очень важно)
Answers & Comments
Ответ:
#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;
}
Объяснение: