STL之元素排列next_permutation 、prev_permutation(C++)

一、排列函数

元素的排列,就是我们在数学中学到的的排列,在C++ 的STL中为我们提供了内置的全排列函数 next_permutation() 和 prev_permutation(),函数原型如下:

bool next_permutation(BidirectionalIterator beg,
					  BidirectionalIterator end)
					  
 bool prev_permutation(BidirectionalIterator beg,
					   BidirectionalIterator end)

next_permutation() 会改变区间 [ beg, end) 内的元素次序,使它们符合 “ 下一个排列次序 ”。
prev_permutation() 会改变区间 [ beg, end) 内的元素次序,使它们符合 “ 上一个排列次序 ”。

其元素按字典次序变化,next_permutation() 为升序, prev_permutation() 为降序,若要走遍所有排列,需要先将所有元素(按升序或降序)排列,然后以循环的方式调用函数,直至算法返回 false;

对于n个元素,全排列后有 n! 种排列方式,且最多n/2次交换,n为区间长度,平均每次调用使用了3次比较和1.5次交换,时间复杂度为O(n);

二、函数的使用

使用 next_permutation() 和 prev_permutation(),需声明其头文件 #include <algorithm>using namespace std

1、基础使用

例如 输出“下一个” 或 “上一个” 序列:

#include <iostream>
#include <algorithm>

using namespace std;

int main(){
   
	int a[5] = {
   1,3,5,4,2};
	int b[5] = {
   1,3,5,4,2};
	int copy_a[5] = {
   1,3,
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值