大概思路:对后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[n];
for(int i=0; i<n; i++){
a[i]=i+1;
}
Paixu(a,0);
return 0;
}
图如下:
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[n];
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;
}
}
运行效果如下: