全排列理解和应用

目录

全排列的理解:就是将一个数组进行多次顺序不同的排列方式;

一、学习next_permutation()函数:

代码和效果:

①:对升序数组进行全排列:

②:对乱序数组进行全排列 err!错误!(没有达到理想输出效果):

③:对降序数组进行全排列 err!错误!(没有达到理想输出效果):

④:对升序数组进行全排列 err!错误!(没有达到理想输出效果):使用while效果会少输出一组数据:

二、next_permutation()和sort()的完美结合运行:

三、 你乱任你乱,我玩我自己的! 自己写一个,自己玩!

总结和注意: 


全排列的理解:就是将一个数组进行多次顺序不同的排列方式;

例如:a[3]={1,2,3};

排列后输出:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

基本就是这样

一、学习next_permutation()函数:

C++头文件#include<algorithm>自带next_permutation()全排列函数;

注意:只能对升序数组有用!

代码和效果:

①:对升序数组进行全排列:

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[4] = { 1,2,3,4};
	do{
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	} while (next_permutation(a, a + 4));
	return 0;
}

输出:

②:对乱序数组进行全排列 err!错误!(没有达到理想输出效果):

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[4] = { 1,3,2,4};
	do{
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	} while (next_permutation(a, a + 4));
	return 0;
}

 输出:

③:对降序数组进行全排列 err!错误!(没有达到理想输出效果):

        

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[4] = {4,3,2,1};
	do{
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	} while (next_permutation(a, a + 4));
	return 0;
}

输出:

④:对升序数组进行全排列 err!错误!(没有达到理想输出效果):使用while效果会少输出一组数据:

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[4] = { 1,2,3,4 };
	while (next_permutation(a, a + 4)){
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	} 
	return 0;
}

 如:少输出1 2 3 4这一组数据!

二、next_permutation()和sort()的完美结合运行:

        先用sort()进行升序排列,再用next_permutation()岂不是完美?

        代码:

        

#include<iostream>
#include<algorithm>
using namespace std;
int main() {
	int a[4] = {4,2,3,1};
	sort(a, a + 4);
	do{
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	} while (next_permutation(a, a + 4));
	return 0;
}

输出:

三、 你乱任你乱,我玩我自己的! 自己写一个,自己玩!

#include<iostream>
#include<algorithm>
using namespace std;
int a[4] = { 4,2,3,1 };
void f(int n) {
	if (n == 4) {
		cout << a[0] << " " << a[1] << " " << a[2] << " " << a[3] << endl;
	}
	for (int i = n; i < 4; ++i)
	{	{
		int t = a[n];
		a[n] = a[i];
		a[i] = t;
		}
		f(n + 1); 
		{
			int t = a[n];
			a[n] = a[i];
			a[i] = t;
		}
	}

}
int main() {
	f(0);
	return 0;
}

总结和注意: 

        一、使用next_permutation()时,需要先升序再全排列,

               如果使用while()-do函数,则会少输出第一次的!

        二、sort()和next_permutation()可以完美配合使用!也可以自己写函数代码!

        三、希望给我大佬们多多指点,有问题就有进步!谢谢!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值