Существует ли такой алгоритм?
Ответ найден если кому то интересно, то вот он: 
двигаемся справа налево в поисках цифры которая будет меньше предыдущей. Например для 534976 это будет 4. Затем справа от этой цифры ищем наименьшее число которое будет больше этой цифры (> 4) в данном случае это 6>4.Поменяйте их местами. Получим 536974, затем отсортируйте по возрастанию числа после 6 (в данном случае 974 => 479) получим искомое число 536479
Сортировка по возрастанию \ убыванию? после чего берутся предыдущее и следующее числа возле Х (7809) и сравниваются.