Изменения

Перейти к: навигация, поиск

Получение предыдущего объекта

1026 байт добавлено, 11:25, 30 декабря 2014
Специализация алгоритма для генерации предыдущей перестановки
== Специализация алгоритма для генерации предыдущей перестановки ==
* Двигаясь справа налево, находим элемент, нарушающий убывающую последовательность
* Меняем его с максимальным элементом, меньшим нашего, стоящим правее
* Перевернем правую часть
 
'''int[]''' nextPermutation('''int[]''' a): <font color=green>// <tex>n</tex> {{---}} длина перестановки</font>
'''for''' i = n - 2 '''downto''' 0
'''if''' a[i] > a[i + 1]
max = i + 1
'''for''' j = i + 1 '''to''' n - 1
'''if''' (a[j] < a[max]) '''and''' (a[j] < a[i])
max = j
swap(a[i], a[j])
reverse(a, i + 1, n - 1)
'''return''' a
'''return''' ''null''
== Специализация алгоритма для генерации предыдущей мультиперестановки ==
Алгоритм полностью аналогичен генерации предыдущей перестановки
* Двигаясь справа налево, находим элемент, нарушающий убывающую последовательность
* Меняем его с максимальным элементом, меньшим нашего, стоящим правее
107
правок

Навигация