庞果网上的一道题目:打印N个字符的全排列,百度了一下。百度百科介绍如下(http://baike.baidu.com/view/1710135.htm),根据百度百科的提示,自己实现了一下,以下为源代码:
public class Combine {
public static void combine(Integer[] array) {
Integer[] res = array;
output(array);
int flag;
while (isDes(res)) {
for (int i = res.length - 1; i > 0; i--) {
if (res[i - 1] < res[i]) {
flag = i - 1;
for (int j = res.length - 1; j > flag; j--) {
if (res[j] > res[flag]) {
swap(res, j, flag);
break;
}
}
res = sort(res, i, res.length);
output(res);
break;
}
}
}
}
public static Integer[] sort(Integer[] array, int start, int end) {
for (int i = start; i < end; i++) {
for (int j = i; j < end; j++) {
if (array[i] > array[j]) {
int t = array[i];
array[i] = array[j];
array[j] = t;
}
}
}
return array;
}
public static boolean isDes(Integer[] array) {
boolean flag = false;
for (int i = 0; i < array.length - 1; i++) {
if (array[i] < array[i + 1]) {
flag = true;
break;
}
}
return flag;
}
public static Integer[] swap(Integer[] array, int a, int b) {
int t;
t = array[a];
array[a] = array[b];
array[b] = t;
return array;
}
public static void output(Integer[] array) {
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + "\t");
}
System.out.print("\r\n");
}
public static void main(String[] args) {
Integer[] arr = {1, 2, 3, 4, 5, 6, 7};
combine(arr);
}
}