Java实现数组全排序(递归)

import org.junit.Test;  
  
/**
 * 全排序思路:假设有n个数需要进行全排列,我们可以把每个数都放到第一个位置,然后剩下的n-1个数进行全排列。
 * 即有n*(n-1)!种可能性,与n个数进行全排列的n!次可能性一致
 * 利用递归的方式,依此类推当剩下的数个数为1时,为一次排列,输出该排列。
 * 所以递归函数可以如下permutation所示:
 * @author YH
 *
 */

public class AllSort {  
  
    public void permutation(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++) {  
                char temp = buf[start];// 交换数组第一个元素与后续的元素  
                buf[start] = buf[i];  
                buf[i] = temp;  
  
                permutation(buf, start + 1, end);// 后续元素递归全排列  
  
                temp = buf[start];// 将交换后的数组还原  
                buf[start] = buf[i];  
                buf[i] = temp;  
            }  
        }  
    }  
  
    @Test  
    public void testPermutation() throws Exception {  
        char[] buf = new char[] { 'a', 'b', 'c' };  
        permutation(buf, 0, 2);  
    }  
}


运行测试,输出结果:
abc
acb
bac
bca
cba
cab

你可能感兴趣的:(Java基础知识整理)