非递归全排列
问题描述
设计和实现一个输出全排列的程序。
2.
问题分析
参考了网上的一个新的算法
---
字典序列的方法来就全排序
比如求
3,1,2,4
的全排列,这种方法将这些序列进行了一个排序,比
如得到全排序之后的的所有序列第一个序列是,
1,2,3,4
最后一个序
列是
4,3,2,1
也就是递增的方法来查找序列,比如,
3214
的下一个序
列就是
3241
。当然这个算法必须要对该数组进行有大到小的顺序情
况下进行,所以要对数组进行一次由小到大的排序。
交换
void swap(int *a,int *b)
逆置
void revArr(int *arr,int k,int m)
全排列
int fullArr(int *arr,int n)
#include
using namespace std;
void swap(int *a,int *b) //
交换
{
int tmp=*a;
*a=*b;
*b=tmp;
}
void revArr(int *arr,int k,int m) //
数组
arr
从
k
到
m
进行逆置
{
while(k
{