您的位置:首页 > 其它

递归实现全排列

2017-07-27 19:28 274 查看
大概思路:对后i个数进行排列,如前n-i个数位置已经固定,对后i个数进行递归排序。

排序规则是:将第n-i个数的位置和第n-i+1~n-1的数位置分别进行调换并输出,在输出完成后要调换回来。

C++代码:

#include <iostream>

using namespace std;
int n;
void Paixu(int a[],int m){
if(m>=n){
for(int i=0; i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
}
else{
for(int i =m; i<n;i++){
swap(a[i],a[m]);
Paixu(a,m+1);
swap(a[i],a[m]);
}
}
}
int main()
{
cin>>n;
int *a=new int
;
for(int i=0; i<n; i++){
a[i]=i+1;
}
Paixu(a,0);
return 0;
}

图如下:



java代码:

package digui;

import java.util.Scanner;

public class Digui3 {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int a[]=new int
;
for(int i=0; i<n;i++){
a[i]=i+1;
}
Paixu(a,0);
}

private static void Paixu(int[] a, int m) {
// TODO Auto-generated method stub
if(m>=a.length){
for(int i =0;  i<a.length;i++){
System.out.print(a[i]+" ");
}
System.out.println();
}
else{
for(int i = m; i<a.length; i++){
swap(a, m, i);
Paixu(a, m+1);
swap(a, m, i);
}
}
}
private static void swap(int[] a, int m, int i) {
// TODO Auto-generated method stub
int temp=a[m];
a[m]=a[i];
a[i]=temp;
}
}
运行效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: