全排列

关键:array[0...n] 的全排列是Perm(array,(0...n)) =  array[i] 与 Perm(array[0...i-1,i+1n))的组合

  1. public class TestPerm {  
  2.     public static void main(String[] args){ 
  3.         test1(); 
  4.     }    
  5.     public static void test1(){ 
  6.         String str = "abcde"
  7.         char[] array = str.toCharArray(); 
  8.         TestPerm.perm(array, 0, array.length); 
  9.         System.out.println("Total:"+TestPerm.count); 
  10.     } 
  11.     private static int count = 0
  12.     public static void perm(char[] array, int start, int end){ 
  13.         if(start==end){ 
  14.             count++; 
  15.             System.out.println(array); //输出该排列
  16.             return
  17.         } 
  18.         for (int i = start; i < end; i++) { 
  19.             swap(array, start, i); 
  20.             perm(array, start+1, end); 
  21.             swap(array, start, i); 
  22.         } 
  23.     } 
  24.  
  25.     private static void swap(char[] array, int a, int b) { 
  26.         if(a!=b){ 
  27.             array[a] = (char) (array[a]^array[b]); 
  28.             array[b] = (char) (array[b]^array[a]); 
  29.             array[a] = (char) (array[b]^array[a]); 
  30.         }            
  31.     }