题目:采用递归算法产生a[0:2]={1,2,3}的全排列。写出算法实现代码并截屏程序的运行结果。
本题的解题思路很简单,别把它看得太困难!!!请看下面:
首先,运行我们的数学知识,{1,2,3}这个数组一共有6种排列:3*2*1=6
题目让我们生成数组的全排列,即把数组的全部可能排序方式列出来,就这么简单!!!
用代码实现起来也不会很难哒!!!
算法思路:
1、把元素1的位置固定,做2,3的全排列,即2,3和3,2两种排列方式
得到两个排列:1,2,3和1,3,2
2、再把1,2交换位置,固定元素2在第一个位置,剩下就是做1,3的全排序了
得到:2,1,3和2,3,1
3、同样的道理,这次轮到元素3在第一个位置,做1,2的全排列
得到:3,1,2和3,2,1
完整的实现代码:(附有详细的注释)
public class pailie //全排列递归算法
{
public static void swap(int[] arr,int i,int j) //构造方法:交换两个元素
{
int temp;
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
//System.out.print("运行了swap"+" "); //运行测试
}
public static void arrange(int[] arr,int st,int len) //构造方法:排列
{
if(st == len-1)
{
//System.out.println("准备输出排序"); //运行测试
for(int i=0;i<len;i++)
{
System.out.print(arr[i]+" "); //输出排列结果
}
System.out.println(); //输出换行
}
else{
for(int i=st;i<len;i++)
{
swap(arr,st,i);
arrange(arr,st+1,len);
swap(arr,st,i);
}
}
}
public static void main(String[] args) //程序运行入口
{
int[] a={1,2,3};
System.out.println("全排序为:");
arrange(a,0,a.length); //调用arrange方法
System.out.println("运行结束!");
}
}
运行结果:
咋样?你学废了么?
关注我,我教你啊!!!