ПОЖАЛУЙСТА. сижу уже несколько часов. Код поправить Python, написать нумерацию вывода каждого шага

shaymunov

Новичок
Пользователь
Ноя 15, 2022
1
0
1
Условие: Метод сортировки слияние. Выводить каждый шаг: примерно так: print(f'Массив после {r} - ой итерации: ', *c)
Весь код есть, но нумерацию вывода шага, как появляется новый массив не могу написать.
мой код:
Python:
print('Метод сортировки слияние')
# Функция должна объединить два списка.
 
def two_list(a,b):
    r = 0
    c = [] # Список, в который будем помещать сортированные элементы.
    i = j = 0 # Два указателя, которые будут указывать на первые элементы a и b.
    while i < len(a) and j < len(b): # Цикл, пока i не привысит длины списка a и пока j не привысит длины списка b.
        if a[i] < b[j]: # Если элемент a меньше элемента b, то добавляем в список c этот(элемент а) элемент.
            c.append(a[i])
            i+=1    # Двигаем указатель i(точнее прибалем 1), чтобы перейти к следующему элементу.
            r+=1
            print(f'Массив после {r} - ой итерации: ', *a)
        else:       # Если элемент a больше элемента b, то помещаем в список элемент b.
            c.append(b[j])
            j+=1  # Двигаем указатель j(точнее прибавлем 1), чтобы перейти к следующему элементу.
            r+=1
            print(f'Массив после {r} - ой итерации: ', *b)
    if i<len(a): # Если i не достиг конца длины а, то мы в список с добавлем все, что находилось в а с индексом i и до конца списка а.
        c+=a[i:]
    if j<len(b): # Если j не достиг конца длины b, то мы в список с добавлем все, что находилось в b с индексом j и до конца списка а.
        c+=b[j:]
    return c   # Возвращаем список с.
s = list(map(int, input("Введите элементы: ").split()))
# Функция должна выполнить сортровку.
def sort(s):
    if len(s) == 1: # Если длина списка = 1, то значит, список отосртирован и состоит из 1 элемента.
        return s    # Возвращаем элемент.
    middle = len(s)//2 # Если условие не выполняется, то находим середину списка. Длина списка деленная нацело пополам.
    left = sort(s[:middle]) # Узнаем левую часть списка, то есть от начала спика до середины(middle).
    right = sort(s[middle:])# Узнаем правую часть списка, то есть от середины до конца списка.
    return two_list(left, right) # Объединяем обе эти части, после сортировки.
print("Результат:", *sort(s))
Мой результат: но должно быть по другому. Заранее спасибо.
 

Вложения

  • 300391057_d80f2871184da848e1c68ffec66f6df9_800.png
    300391057_d80f2871184da848e1c68ffec66f6df9_800.png
    104 КБ · Просмотры: 7

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 587
459
83
очень сложно читать код с переменными i j a b c
можно заменить while на for, тогда переменные i j не нужны, это первое что бросилось в глаза
и с рекурсией вы перемудрили
 

Форум IT Специалистов