Wikipedia has a nice article on lexicographical order generation. It also describes an algorithm to generate the next permutation.
Quoting:
The following algorithm generates the next permutation lexicographically after a given permutation. It changes the given permutation in-place.
- Find the highest index
i
such thats[i] < s[i+1]
. If no such index exists, the permutation is the last permutation.- Find the highest index
j > i
such thats[j] > s[i]
. Such aj
must exist, sincei+1
is such an index.- Swap
s[i]
withs[j]
.- Reverse the order of all of the elements after index
i
till the last element.