130
правок
Изменения
Нет описания правки
== Идея ==
Сопоставим каждому элементу перестановки <tex>p[i]</tex> направление <tex>d[i]</tex>. Будем указывать направление при помощи стрелок '''←''' ("влево") или '''→'''("вправо"). Назовём элемент подвижным, если по направлению стелки стоит элемент меньше его. Например для <tex>p</tex> = ''\{1, 3, 2, 4, 5\}'' и <tex>,\;d= \{</tex> = ''{←, →, ←, →, ←<tex>\}''</tex>, подвижными являются элементы 3 и 5. На каждой итерации алгоритма будем искать наибольший подвижный элемент и менять местами с элементом, который стоит по направлению стрелки. После чего поменяем направление стрелок на противоположное у всех элементов больших текущего.Изначально <tex> p = \{1, ... ,n\},\;d = \{</tex>←, ... ,←<tex>\}</tex> == Пример работы алгоритма для n =3 =<tex>n = 3</tex>
*<tex> p = \{1, 2, \textbf{3}\}\;\;\;d = \{</tex>←, ←, ←<tex>\}</tex>
*<tex> p = \{1, \textbf{3}, 2\}\;\;\;d = \{</tex>←, ←, ←<tex>\}</tex>