本博 转载自 https://blog.csdn.net/u013309870/article/details/68941284数组
从n个不一样元素中任取m(m≤n)个元素,按照必定的顺序排列起来,叫作从n个不一样元素中取出m个元素的一个排列。当m=n时全部的排列状况叫全排列。
例如:spa
1 、2 、3三个元素的全排列为:.net
{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,1,2},{3,2,1}。
code
1 public class HelloWorld { 2 public static void main(String []args) { 3 Permutation(new char[]{'1','2','3'},0); 4 } 5 6 7 public static void Permutation(char chs[],int start ) 8 { 9 if(start==chs.length-1) 10 { 11 System.out.println(chs); 12 //若是已经到了数组的最后一个元素,前面的元素已经排好,输出。Arrays.toString(chs); 13 } 14 for(int i=start;i<=chs.length-1;i++) 15 { 16 //把第一个元素分别与后面的元素进行交换,递归的调用其子数组进行排序 17 Swap(chs,i,start); 18 Permutation(chs,start+1); 19 Swap(chs,i,start); 20 //子数组排序返回后要将第一个元素交换回来。 21 //若是不交换回来会出错,好比说第一次一、2交换,第一个位置为2,子数组排序返回后若是不将一、2 22 //交换回来第二次交换的时候就会将二、3交换,所以必须将一、2交换使1仍是在第一个位置 23 } 24 } 25 26 27 public static void Swap(char chs[],int i,int j) 28 { 29 char temp; 30 temp=chs[i]; 31 chs[i]=chs[j]; 32 chs[j]=temp; 33 } 34 }
运行结果blog
123
132
213
231
321
312排序
2. ch[] = {'1','2','1'}的状况递归
加一个判断解决 交换的两个字符值相等 ,跳过get