头文件:#include<algorithm>       using namespace std;//别忘记这个!!!.

函数名:prev_permutation()           //默认升序排列.

bool cmp(int a,int b){              

return a>b;                                  //降序就加上这个cmp函数(类似于sort()函数)

}                                                  //prev_permutation(a,a+n,cmp) 


例题:输入一个不大于9位的数字字符串,按升序输出其所有全排列。

input    :   132

output :   123

               132

               213

               231

               312

               321

#include<bits/stdc++.h>         
using namespace std;
int main(){
	char s[9];
	gets(s);
	int n=strlen(s);
	sort(s,s+n);              //对所有元素升序排序 
	puts(s);                  //输出最小的排列 (1.2.3)
	while(next_permutation(s,s+n))   //升序输出最小排列之后的所有排列 
    {
        puts(s);
    }
    return 0;
	
}


假如题目要求改为降序,可以把代码改成这样:

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){      //这个cmp()可以共用
	return a>b;      
}
int main(){
	char s[9];
	gets(s);
	int n=strlen(s);
	sort(s,s+n,cmp);   //降序排列所有元素
	puts(s);           //输出的排列,是最大的那种情况(3.2.1)
	while(prev_permutation(s,s+n)) //降序输出最大排列之后的所有排列 

    {
        puts(s);
    }
    return 0;
	
}

注意理解 next和prev的含义.通过改变限制条件或者cmp(),使用中可以实现两种函数的互相转化,读者自行体会.

ps:新手一枚,理解颇浅,如有错误,请多包涵,欢迎指出,并补充.