排列生成算法--字典序法

本文详细介绍了字典序法如何生成全排列,通过寻找正序对和大于特定值的数字进行交换与反序操作,逐步生成排列序列。以1243为例,演示了生成1324的过程,并提供了相应的算法总结与代码实现。
摘要由CSDN通过智能技术生成

本文地址: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)
{
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值