美文网首页
Java全排列递归算法

Java全排列递归算法

作者: 流年花影 | 来源:发表于2017-09-10 11:54 被阅读0次

    刷题!刷题!发现对于数组元素的全排列很多题目都有涉及到,所以详细研究一下
    对一个数组进行全排列,我们可以这样考虑,我们获得了在第一个位置上的所有情况之后,抽去数组中的第一个位置,那么对于剩下的数组可以看成是一个全新的序列,这个序列可以认为是与之前的序列毫无关联了。同样的,我们可以对这个序列进行与之前相同的操作,直到序列中只有一个元素为止。这样我们就获得了所有的可能性。这是一个递归算法。

    package suanfa;
    
    public class Quanpailie {
            public static  void arrage(int[] list, int start, int length) {
                int i;
                if (start == length) {
                    for (i = 0; i < length; i++)
                        System.out.print(list[i] + " ");
                    System.out.println();
                } else {
                    for (i = start; i < length; i++) {
                        swap(list, start, i);
                        arrage(list, start + 1, length);
                        swap(list, start, i);//这里是因为我们每一次如果我们要假定第一位的所有可能性的话,那么就必须是在建立在这些序列的初始状态一致的情况下,所以要回归状态
                    }
                }
            }
            public static  void swap(int[] list, int start, int i) {
                int temp;
                temp = list[start];
                list[start] = list[i];
                list[i] = temp;
            }
            public static  void main(String[] args) {
                int length = 3;
                int start = 0;
                int list[] = new int[length];
                for (int j = 0; j < length; j++)
                    list[j] = j + 1;
                arrage(list, start, length);
            }
    }
    

    结果
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 2 1
    3 1 2

    相关文章

      网友评论

          本文标题:Java全排列递归算法

          本文链接:https://www.haomeiwen.com/subject/vdvzjxtx.html