Upd. Алгоритм ниже неверный, т.к. не работает в случае, когда необходимо переставить сразу несколько цифр.
Рассматриваем пары неодинаковых цифр в числе.
Взаимной их перестановкой можно увеличить число только когда левая цифра меньше правой.
23 -> 32
Размер увеличения тем меньше, чем правее обе цифры. Они могут идти и не подряд, а, скажем, через одну.
Коэффициент, который требуется минимизировать – это десятичное число из нулей с единицами в этих позициях. Скажем, лучше поменять позиции 2 и 3, чем 4 и 1, т.к.
110 < 1001
Т.е. при переборе позиций меньше всего хотим двигать левую позицию, пока не переберем все варианты правой:
Варианты для 40011
0101
0110
1001
1010
1100
Отсюда
алгоритм.
- справа налево перебираем пары цифр пока не найдётся первая пара, где
левая меньше правой
- меняем их местами.
Всё.