遞歸實現 全排列

遞歸實現全排列:

算法思路:
(1)n個元素的全排列=(n-1個元素的全排列)+(另一個元素作爲前綴);
(2)出口:如果只有一個元素的全排列,則說明已經排完,則輸出數組;
(3)不斷將每個元素放作第一個元素,然後將這個元素作爲前綴,並將其餘元素繼續全排列,等到出口,出口出去後還需要還原數組;

如下圖所示:


 public static void swap(int[] a,int i1, int i2){
int temp=a[i1];
a[i1]=a[i2];
a[i2]=temp;  
}




 public static void perm(int[] arr, int begin, int end){
if(begin==end){
for(int i=0;i<=end;i++){
System.out.print(arr[i]+" "); 
}
System.out.println(); 
}
 
else{
for(int j=begin; j<=end;j++){
swap(arr, begin, j);           //for循環將begin~end中的每個數放到begin位置中去 
perm(arr, begin+1, end);  //假設begin位置確定,那麼對begin+1~end中的數繼續遞歸  
swap(arr, begin, j);          //換過去後再還原 
}
}
}


public static void main(String  args[]){

int[] arr={1,2,3,4};

 perm(ar,0,arr.length-1);


}







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章