本博 轉載自 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