关闭

STL next_permutation and prev_permutation

95人阅读 评论(0) 收藏 举报
分类:

STL next_permutation and prev_permutation 说明

功能为实现将数组进行一次字典排序,自动实现排序后的下一排序好的数组储存在原数组中。
如a[3] = {0, 1, 2}经过next_permutation(a, a+3)之后a[3] = {0, 2, 1},排序到最大字典序时自动回到原始数据排序。

## STL next_permutation and prev_permutation 代码 ##

.h文件

template<class BidirectionalIterator>  
bool next_permutation(  
      BidirectionalIterator _First,   
      BidirectionalIterator _Last  
);  
template<class BidirectionalIterator, class BinaryPredicate>  
bool next_permutation(  
      BidirectionalIterator _First,   
      BidirectionalIterator _Last,  
      BinaryPredicate _Comp  
 ); 

.cpp文件
说明:
在当前序列中,从尾端往前寻找两个相邻元素,前一个记为*i,后一个记为*ii,并且满足*i < *ii。然后再从尾端寻找另一个元素*j,如果满足*i < *j,即将第i个元素与第j个元素对调,并将第ii个元素之后(包括ii)的所有元素颠倒排序,即求出下一个序列了。

template<class BidirectionalIterator>  
bool next_permutation(  
      BidirectionalIterator first,   
      BidirectionalIterator last  
)  
{  
    if(first == last)  
        return false; //空序列  

    BidirectionalIterator i = first;  
    ++i;  
    if(i == last)  
        return false;  //一个元素,没有下一个序列了  

    i = last;  
    --i;
    for(;;) {  
        BidirectionalIterator ii = i;  
        --i;  
        if(*i < *ii) {  
            BidirectionalIterator j = lase;  
            while(!(*i < *--j));  

            iter_swap(i, j);  
            reverse(ii, last);  
            return true;  
        }  

        if(i == first) {  
            reverse(first, last);  //全逆向,即为最小字典序列,如cba变为abc  
            return false;  
        }  
    }  

}  
0
0
查看评论

STL具体操作之next_permutation和prev_permutation函数

 next函数默认的是从小到大的顺序,pre函数默认的是从大到小的顺序; {3,1,2}用next得到的结果是{3,1,2}和{3,2,1};       用pre得到的结果是{3,1,2},{2,3,1},{2,1,3},{1,3,2,}...
  • yueloveme
  • yueloveme
  • 2015-07-31 08:09
  • 1030

STL全排列算法next_permutation和prev_permutation

全排列的问题取决于如何找到“下一个”,然后就用同样的方法找到全部的排列 下面只利用next_permutation从“第一个”开始,修改内容到“下一个”,知道所有的都遍历完,不再有”下一个“为止 #include #include #include #include using names...
  • ClamReason
  • ClamReason
  • 2014-11-14 21:34
  • 1911

[转载]STL算法:prev_permutation和next_permutation的使用

在标准库算法中,next_permutation应用在数列操作上比较广泛.这个函数可以计算一组数据的全排列.但是怎么用,原理如何,我做了简单的剖析.首先查看stl中相关信息.函数原型:template bool next_permutation( BidirectionalIterat...
  • vangoals
  • vangoals
  • 2009-06-19 23:35
  • 2727

C++ 全排列函数 std::next_permutation与std::prev_permutation

C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序、std::prev_permutation提供降序。 1.std::next_permutatio...
  • sunshihua12829
  • sunshihua12829
  • 2015-11-27 10:44
  • 511

【经典算法】STL之next_permutation和prev_permutation

STL之next_permutation和prev_permutation
  • u011006475
  • u011006475
  • 2015-09-08 21:09
  • 245

C++标准库---排列元素next_permutation()&prev_permutation()

bool next_permutation(beg,end) bool prev_permutation(beg,end) next_permutation()会改变区间[beg,end)内的元素次序,使它们符合“下一个排列次序”; prev_permutation()会改变区间[be...
  • lanzhihui_10086
  • lanzhihui_10086
  • 2014-12-26 16:50
  • 735

next_permutation(排列组合)函数的用法

关于该函数的用法,不妨先看下这道题 题目描述  一天ZJ看到小明竟然排序学的比自己还牛,于是就出了一道题来难为小明,来证明自己排序学的比小明更牛。题目就是有一个数n(0,,,聪明的你能帮小明解围吗? 输入  第一行输入一个数N(0 输出 ...
  • FK103
  • FK103
  • 2015-04-11 10:18
  • 1327

STL之next_permutation函数对各种类型的全排列实例

最近学了个next_permutation函数,但学习的还不是很透彻,这里转载一篇博文详解next_permutation函数对各种变量类型的全排列。(转载地址:点击打开链接)   若需要了解next_permutation函数基本含义或c源码,请点击:点击打开链接   ...
  • zwj1452267376
  • zwj1452267376
  • 2015-07-02 18:17
  • 1174

STL源码剖析之next_permutation,prev_permutation

next_permutation()会取得 [ first,last ) 所标示之系列的下一个排列组合。如果没有下一个排列组合,返回false,否则返回true。 算法过程: 首先从最尾端开始往前寻找两个相邻元素,令第一元素为 *i, 第二元素为 *ii ,且满足 *i 与next_...
  • yuanchuanshun
  • yuanchuanshun
  • 2012-10-31 19:18
  • 354

STL/next_permutation()和prev_permutation()函数

next_permutation()和prev_permutation()函数的使用: next_permutation()和prev_permutation()函数的头文件添加为:#include  算法: 首先,从最为段开始往前寻找两个相邻的元素,令第一个元素索...
  • peipeiboshi
  • peipeiboshi
  • 2015-04-09 16:24
  • 187
    个人资料
    • 访问:592次
    • 积分:75
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档