107
правок
Изменения
→Специализация алгоритма для генерации предыдущего битового вектора
'''return''' a
Приведённый алгоритм эквивалентен вычитанию единицы из битового вектора.
== Специализация алгоритма для генерации предыдущей перестановки ==
* Двигаясь справа налево, находим элемент, нарушающий убывающую последовательность
* Меняем его с максимальным элементом, меньшим нашего, стоящим правее
* Перевернем правую часть
'''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''