import java.util.*;public class Align
{
    int j=0,ini=0;
    char[] res;
    public void align(char[] c)
    {
        if(ini==0)
        {
            res=new char[c.length];
            ini++;
        }
        char[] tmpSave=new char[c.length-1];
if(tmpSave.length==0)
        {
   res[j]=c[0];
//          System.out.println(Arrays.toString(res));
            j--;
            return;
        }
        for(int i=0;i<c.length;i++)
        {
            res[j]=c[i];
            for(int m=0,k=0;m<c.length;m++)
            {
                if(m!=i)tmpSave[k++]=c[m];
            }
    j++;
            align(tmpSave);
        }
j--;
    }
    public static void main(String[] args)
    {
long start=System.nanoTime();
        new Align().align("ABCDEFGHIJKLMN".toCharArray());
System.out.println(System.nanoTime()-start);
    }
}
上面代码是计算"ABCDEFGHIJKLMN"所有的排列可能,如果把代码中的注释去掉,将会在控制台中打印每一种组合,
当然,我这个算法很烂,时间复杂度是n的阶乘(如果我没弄错的话),按道理他执行的指令大概是14!,因为一行JAVA代码可能是由若干条机器指令组成的,再加上其它一些乱七八糟的,我就算执行指令的次数是14!的10倍,这个数就是12789452800,
而我的CPU是2GHZ的,就算全是4周期指令,那么一条指令的时间大概是4*12*1/2000000000,两者相乘,那么就大概是288秒,5分种怎么都执行完了,怎么我执行了半小时还没执行完,暴汗一个,是不是其中我哪里估算错了,少估了个数量级?