詳細的解析:
/randyjiawenjie/article/details/6313729
假設這n個數的某壹個排列為 P: P1 P2 P3...Pj-1 Pj Pj+1...Pk-1 Pk Pk+1...Pn
1.從該序列的 最右端 開始向左找出第壹個比與自己相鄰的右邊數小的數,記其下標為j,即j = max{i|Pi<Pi+1}.
2.找出Pj右邊比Pj大的 最小數Pk .
3.交換Pj,Pk.此時序列變為 P’: P1 P2 P3...Pj-1 Pk Pj+1...Pk-1 Pj Pk+1...Pn
4.將Pj+1...Pn 倒轉,即得到此序列的後壹個序列 P”: P1 P2 P3...Pj-1 Pn...Pk+1 Pj Pk-1...Pj+1
例:
1 2 3 5 7 4 6 10 9 8為1-10的壹個排列
1.從該序列的最右端開始向左找出第壹個比與自己相鄰的右邊數小的數6,其下標為7
2.6右邊比6大的最小數為8
3.交換6,8得到1 2 3 5 7 4 8 10 9 6
4.將P8-P10倒轉得到:1 2 3 5 7 4 8 6 9 10即為下壹個序列
實現如下: