М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
дзхен
дзхен
24.04.2022 09:30 •  Информатика

С++ Сортировка слиянием
Отсортируйте данный массив, используя сортировку слиянием. Попробуйте написать свою реализацию, например, не создавая новые векторы при каждом рекурсивном вызове.

Входные данные

Первая строка входных данных содержит количество элементов в массиве N,N≤105. Далее идут N целых чисел, не превосходящих по абсолютной величине 109.

Выходные данные

Выведите эти числа в порядке неубывания.

Примеры
Ввод
Вывод
2
3 1
1 3

👇
Ответ:
Staer1188
Staer1188
24.04.2022

#include <vector>

#include<iostream>

template <typename T>

inline void swap(T& arg1, T& arg2)

{

   T temp = arg1;

   arg1 = arg2;

   arg2 = temp;

};

template <typename T>

inline void merge(std::vector<T>& vArray, std::vector<T>& vTemp, int head, int middle, int tail)

{

   int tmp = 0, lower = head, upper = middle + 1;

 

   while (lower <= middle && upper <= tail)

   {

       if (vArray[lower] < vArray[upper])

       {

           vTemp[tmp++] = vArray[lower++];

       }

       else

       {

           vTemp[tmp++] = vArray[upper++];

       }

   }

 

   if (lower <= middle)

   {

       for (; lower <= middle; vTemp[tmp++] = vArray[lower++]);

   }

   else

   {

       for (; upper <= tail; vTemp[tmp++] = vArray[upper++]);

   }

 

   int arrayPointer = head;

   for (tmp = 0; arrayPointer <= tail; vArray[arrayPointer++] = vTemp[tmp++]);

}

template <typename T>

inline void merge_sort_helper(std::vector<T>& vArray, std::vector<T>& vTemp, int head, int tail)

{

   if (head == tail)

   {

       return;

   }

 

   int middle = (head + tail) / 2;

 

   merge_sort_helper(vArray, vTemp, head, middle);

   merge_sort_helper(vArray, vTemp, middle + 1, tail);

 

   merge(vArray, vTemp, head, middle, tail);

}

 

template <typename T>

void merge_sort(std::vector<T>& vArray)

{

   std::vector<T> v(vArray.size(), 0);

   merge_sort_helper(vArray, v, 0, vArray.size() - 1);

}

int main() {

   int n;

   std::cin >> n;

   std:: vector<int>vArray(n);

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

       std:: cin >> vArray[i];

   }

   merge_sort(vArray);

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

       std::cout << vArray[i]<<" ";

   }

}

4,7(27 оценок)
Открыть все ответы
Ответ:
mikhailstrelni
mikhailstrelni
24.04.2022
1. Если имеется в виду язык Pascal, то получим следующее:
var: a;
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
begin
  readln(a);
  b:=a+a;
  writeln (b);
end.

Program50.pas(5) : Неизвестное имя 'b'

2. Попробуем такой вариант на Python

a =int(input())
b = a+a
print(b)

При вводе а получим на выходе 10

Получается, что в Pacal требуется объявлять переменные в секции переменных, или в любом месте программы можно объявить переменную с служебного слова var для PascalABC.net. Первый код можно переписать так, и он будет работать:

var: a;
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
begin
  readln(a);
  var b:=a+a;
  writeln (b);
end.

Рузультат при введенном значении 5 равен 10
4,4(42 оценок)
Ответ:
vaniafc007
vaniafc007
24.04.2022
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;

int main()
{
vector<int> v;
cout <<"Укажите размер массива: ";
int s;
cin >>s;
srand(time(0));
for(int i=0; i!=s; ++i)
v.push_back(rand()%100);
int find;
cout <<"Введите число для поиска: ";
cin >>find;
bool founded = false;
for(auto it=v.begin(); it!=v.end(); ++it)
if(*it==find) founded=true;
if(founded)
cout <<"Это число есть в массиве!" <<endl;
else cout <<"Такого числа нет в мвссиве!" <<endl;

return 0;
}
4,7(46 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ