Есть ответ 👍

Опишите , что делается в каждой строке def Merge(mass, p, q, r):
left = mass[p : q + 1]
right = mass[q + 1 : r + 1]
i, j, k = 0, 0, p
while i < len(left) and j < len(right):
if left[i] < right[j]:
mass[k] = left[i]
i += 1
else:
mass[k] = right[j]
j += 1
k += 1
while i < len(left):
mass[k] = left[i]
i += 1
k += 1
while j < len(right):
mass[k] = right[j]
j += 1
k += 1

139
421
Посмотреть ответы 2

Ответы на вопрос:

alena7a1
4,5(91 оценок)

Привет питонистам!

# - значок комментария, я использовала его, чтобы, если что, была возможность запустить код и свериться со всем в процессе

Вроде, примерно я всё описала, но если что-то не до конца понятно, можешь спрашивать!! Код действительно не самый тривиальный, но, вроде, это одна из реализаций merge sort или сортировки слиянием

Насколько я понимаю, в результате вызова этой подпрограммы мы проходимся по части массива (с элемента под номером p и до последнего) и при этом постоянно сравниваем элементы из двух частей от этой части массива - левой и правой. Таким образом, если у нас mass = {6, 3, 5, 1, 2, 7}, p = 0, q = 2, r = 5

Получаем left = {6, 3, 5}, right = {1, 2, 7}

И, проходясь по циклу while, получаем следующие значения:

1-ая итерация цикла: 6 > 1 => mass = {1, 3, 5, 1, 2, 7}

2-ая: 6 > 2 => mass = {1, 2, 5, 1, 2, 7}

3-я: 6 < 7 => mass = {1, 2, 6, 1, 2, 7}

4-я: 3 < 7 => mass = {1, 2, 6, 3, 2, 7}

5-я: 5 < 7 => mass = {1, 2, 6, 3, 5, 7}

Затем наш цикл заканчивается, так как просмотрены все элементы массива left, но, так как мы не поставили на место последний элемент массива right, запустится самый нижний цикл. Нам повезло и семёрка уже стоит на своём месте, но программа перепишет её ещё раз

Итог первого прохода программы: mass = {1, 2, 6, 3, 5, 7}

Как мы видим, произошла частичная сортировка, но, чтобы полностью отсортировать массив, требуется больше одного подхода и сходу весь алгоритм я написать не смогу - если это нужно, напиши и я попробую разобраться через какое-то время

# def - слово, говорящее нам о том, что перед нами подпрограмма/функция

# Атрибуты:

# mass - некоторый массив чисел

# p, q, r - некоторые значения. Имеет смысл вводить такие, что p <= q < r

def Merge(mass, p, q, r):

# Вводим массив left: это новый массив, включающий в себя с p-ого по (q+1)-ый элементы массива mass

left = mass[p : q + 1]

# Вводим массив right: это новый массив, включающий в себя с (q+1)-ого по (r+1)-ый элементы массива mass

right = mass[q + 1 : r + 1]

# i, j, k - традиционные наименования переменных циклов

i, j, k = 0, 0, p

# len() - функция для подсчёта количества элементов в массиве

# Соответственно, цикл выполняется до тех пор, пока не будут просмотрены все элементы в массиве left или все - в массиве right

while i < len(left) and j < len(right):

 # Вначале мы проверяем, больше ли i-ый элемент массива left j-ого в массиве right

 if left[i] < right[j]:

  # Если да, заменяем k-ый элемент массива i-ым элементом массива left

  mass[k] = left[i]

  # И прибавляем к i единицу, чтобы сдвинуть цикл

  i += 1

 else:

  # Если нет, заменяем k-ый элемент массива j-ым элементом массива right

  mass[k] = right[j]

  # И сдвигаем j на единицу

  j += 1

 # После этого, вне зависсимости от результата условия, сдвигаем k

 k += 1

# Затем, так как есть шанс, что элементы в каком-то из массивов не просмотрены до конца, проверяем массивы

# Если программа не до конца массива left, она перекладывает все элементы из него в массив mass

while i < len(left):

 mass[k] = left[i]

 i += 1

 k += 1

# Если программа не до конца массива right, она перекладывает все элементы из него в массив mass

while j < len(right):

 mass[k] = right[j]

 j += 1

 k += 1

TryCake
4,4(28 оценок)

Pascal ABC.Net

1)

begin

 var (x, y, z) := ReadInteger3('Введите 3 числа через пробел: ');

 Println(if (x + y + z) mod x = 0 then 'Делится без остатка' else 'С остатком');

end.

2)

begin

 Println('Среднее арифметическое: ', Range(10, 99, 1).Where(x -> x mod 2 = 0).Average);

end.

Реши свою проблему, спроси otvet5GPT

  • Быстро
    Мгновенный ответ на твой вопрос
  • Точно
    Бот обладает знаниями во всех сферах
  • Бесплатно
    Задай вопрос и получи ответ бесплатно

Популярно: Информатика

Caktus Image

Есть вопросы?

  • Как otvet5GPT работает?

    otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса.
  • Сколько это стоит?

    Проект находиться на стадии тестирования и все услуги бесплатны.
  • Могу ли я использовать otvet5GPT в школе?

    Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое!
  • В чем отличия от ChatGPT?

    otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.

Подпишись на наш телеграмм канал

GTP TOP NEWS