public class AllSort{ static int count; public static void main(String[] args) { char buf[]={'a','b','c'}; long curr = System.nanoTime(); perm(buf,0,buf.length-1); System.out.println("总耗时:"+(System.nanoTime()-curr)+"| 递归次数:"+count); } public static void perm(char[] buf,int start,int end){ if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 for(int i=0;i<=end;i++){ System.out.print(buf[i]); } System.out.println(); } else{//多个字母全排列 for(int i=start;i<=end;i++){ swap(buf,start,i);//交换数组第一个元素与后续的元素 count++; perm(buf,start+1,end);//后续元素递归全排列 swap(buf,start,i);//将交换后的数组还原 } } } public static void swap(char[] buf,int start,int i){ char temp=buf[start];//交换数组第一个元素与后续的元素 buf[start]=buf[i]; buf[i]=temp; } } //本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/justinavril/archive/2008/08/02/2758636.aspx
运行结果:
abc acb bac bca cba cab 总耗时:1132284| 递归次数:9