def sortic(mass_a): mass_b = [] mass_commands = [] while mass_a: # индекс минимального элмента minimal_index = ft_find_lst(mass_a, ft_min(mass_a)) # если первый элемент - минимум, то убераем его в другой стэк и сортируем дальше if ft_min(mass_a) == mass_a[0]: mass_commands.append('pb') mass_b.append(mass_a[0]) mass_a = ft_slice(mass_a, 1, ft_len(mass_a)) else: # находим рассстояние от концов # списка до концов списка и находим до куда ближе if minimal_index >= ft_len(mass_a) - minimal_index - 1: mass_a = rra(mass_a) mass_commands.append('rra') elif minimal_index <= ft_len(mass_a) - minimal_index - 1: mass_a = ra(mass_a) mass_commands.append('ra') return mass_commands
def rra(mass_a): """сдвиг всех элементов стека a на 1 вниз""" res = [0] + mass_a res[0] = res[-1] res_x = [] for i in range(ft_len(res) - 1): res_x.append(res[i]) return res_x
def ra(mass_a): """ сдвиг всех элементов стека а на 1 вверх. Первый элемент становится последним """ x = mass_a[0] mass_cop = [] for i in range(1, ft_len(mass_a)): mass_cop.append(mass_a[i]) mass_cop.append(x) return mass_cop
def sa(mass_a): """Меняет местами первые 2 элемента на вершине стека a""" if ft_len(mass_a) > 1: mass_a[0], mass_a[1] = mass_a[1], mass_a[0] return mass_a
def sb(mass_b): """Меняет местами первые 2 элемента на вершине стека b""" if ft_len(mass_b) > 1: mass_b[0], mass_b[1] = mass_b[1], mass_b[0] return mass_b