设现有序列为a[1 ... n]。
(1)在a[1 ... n]找到所有满足a[p] < a[p+1]的p的最大值。如果不存在这样的p,说明现有序列已经是最大字典序的排列。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
7 | 3 | 4 | 2 | 0 | 1 | 5 | 8 | 6 |
例如上表中有a[1] < a[2],a[4] < a[5],a[5] < a[6],a[6] < a[7]这四对关系。
其中满足要求的p的最大值为6。
(2)在a[p+1 ... n]中找到所有满足a[q] > a[p]的a[q]的最小值。
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
7 | 3 | 4 | 2 | 0 | 1 | 5 | 8 | 6 |
例如上表中当p = 6时:
q = 7,a[q] = 8 > a[p]
q = 8,a[q] = 6 > a[p]
最小的a[q]为6,此时q = 8。
(3)交换a[p]和a[q],并反转a[p+1 ... n]中的元素。
以上表为例:
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
7 | 3 | 4 | 2 | 0 | 1 | 5 | 8 | 6 |
交换a[p]和a[q]后变为:
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
7 | 3 | 4 | 2 | 0 | 1 | 6 | 8 | 5 |
反转a[p+1 ... n]的元素后变为:
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] |
7 | 3 | 4 | 2 | 0 | 1 | 6 | 5 | 8 |
next_permutation / prev_permutation
原文:http://www.cnblogs.com/meowcherry/p/4395973.html