全排列abc

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;
    }
}


//本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/justinavril/archive/2008/08/02/2758636.aspx

运行结果:

abc
acb
bac
bca
cba
cab
总耗时:1132284| 递归次数:9


转载于:https://my.oschina.net/pana/blog/229418

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值