C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序、std::prev_permutation提供降序。
1.std::next_permutation函数原型
template
bool next_permutation (BidirectionalIterator first, BidirectionalIterator last );
template
bool next_permutation (BidirectionalIterator first,BidirectionalIterator last, Compare comp);
说明:next_permutation,重新排列范围内的元素[第一,最后一个)返回按照字典序排列的下一个值较大的组合。
返回值:如果有一个更高的排列,它重新排列元素,并返回true;如果这是不可能的(因为它已经在最大可能的排列),它按升序排列重新元素,并返回false。
2.代码实例
1 #include <iostream>
2 #include <algorithm> /// next_permutation, sort
3 using namespace std;
4 int main () {
5 int myints[] = {1,2,3,1};
6 sort (myints,myints+4);
7
8 do {
9 cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' '<< myints[3]<<'n';
10 } while ( next_permutation(myints,myints+4) ); ///获取下一个较大字典序排列
11
12 cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] << ' '<< myints[3] <<'n';
13 return 0;
14 }
输出:
3.算法实现原理
见:http://hi.baidu.com/bellgrade/item/70b65b8a7ea3c9c398255fd4
算法描述:
1、从尾部开始往前寻找两个相邻的元素
第1个元素i,第2个元素j(从前往后数的),且i<j
2、再从尾往前找第一个大于i的元素k。将i、k对调
3、[j,last)范围的元素置逆(颠倒排列)
原文链接: https://www.cnblogs.com/xudong-bupt/p/3662986.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/127454
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!