younthu

stl中的next_permutation算法分析

在stl中有一个算法next_permutation用来生产全排列,要求是数组是升序排列好了的。

头文件#include <algorithm>

 

分析:

vs2008模板函数next_permutation实现如下

 

Code

 

思路分析如下:

0,如果数组为空或者只有一个元素,直接返回false;

1,先找出数组最右的比右边已排序的最小的元素小的_Next。如果没有,则表示该序列是已经是完全降序排列的了,反序,使其成为降序序列,然后返回false.

2,找到在右边序列中降序排列时_Next元素的位置mid,交换_Next和mid指向的元素,那么右边得到一个新的以降序排列的序列。

3,反序_Next后面的序列,使其为升序;然后返回true;

 

 

参考:http://msdn.microsoft.com/en-us/library/tw245tyk.aspx.

 

自己实现非模板代码如下:

 

Code

 

 

posted on 2009-10-22 10:11  younthu  阅读(953)  评论(0编辑  收藏  举报

导航