本文地址:http://blog.csdn.net/spch2008/article/details/9631943
所谓字典序法就是按照字典排序的思想逐一产生所有排列。比如1,2,3,4四个数字进行全排列,先1234,1243,1324,1342,1423,1432,…4321。
由1243生成1324的过程:
1. 1243从右向左找第一个正序对24
2. 从右向左找第一个大于2的数,3
3. 交换2与3的位置的:1342
4. 把3后面的数字全部反序的:1324
总结:
1. 从右向左找到第一个正序Pi < Pi+1 (i+1为下标)
2. 从右向左找到第一个大于Pi的数Pj
3. 交换Pi与Pj
4. 将Pj后面的数全部反序,得到一个排序
代码:
void swap(int *arr, int i, int j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
void reverse(int *arr, int first, int last)
{