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

Опишите , что делается в каждой строке 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

👇
Ответ:
ilona122
ilona122
30.05.2020

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

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

Вроде, примерно я всё описала, но если что-то не до конца понятно, можешь спрашивать!! Код действительно не самый тривиальный, но, вроде, это одна из реализаций 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

4,6(93 оценок)
Открыть все ответы
Ответ:
INokentiy228
INokentiy228
30.05.2020
С 22 апреля по 13 мая в нашей школе проходит конкурс «Клумба моей мечты». Ребята 5-8 и 10 класса должны подготовить участок, посадочный материал, материал для ограждения клумбы, продумать дизайн, ну и, конечно, посадить растения. Вечером 6 мая мы собрались осуществить наши планы по посадке клумбы. Было очень холодно, дождливо и ветрено, поэтому поработать пришли только четверо взрослых и пятеро ребят. Ценой героических усилий клумбу вскопали и высадили то, что принесли. Огромное Маниной Ирине Викторовне, Дышековой Татьяне Евгеньевне, Маниной Анастасии, Ломп Карине, Гришковой Юлии, Гордиенко Максиму и Орлову Никите.
4,7(49 оценок)
Ответ:
Если ты не знаешь как создать сейчас скажу.
живешь на правую кнопку мыши там было зимы программу itunes создать и выбираешь папку и как они там документ кто принес на папку потом нажимаю на папку опять только уже левой кнопкой мыши и там вылазит еще открытие удалить и так далее ты нажимаешь изменить имя стираешь новая папка или пишешь свое название папки. заполняющая телефон для музыки на galaxy ты сразу туда туда добавляешь очень много музыки чтоб появилась песня на мелодию на нее появилась ты создал все
4,6(4 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ