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

来源:互联网 发布:php高并发秒杀 实例 编辑:程序博客网 时间:2024/05/01 03:28
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

1 0
原创粉丝点击