给定n个不同的数字,获取其不同的排列,此类问题称作全排列,其方法有多种,最常用也最实用的是通过深度搜索获取字典顺序排列
代码如下:
/**
* 全排列问题(深度搜索字典序)
*
* @author Swing
*
*/
public class Main {
char[] arr = new char[] { '1', '2', '3', '4', '5', '6', '7', '8', '9' };
// 每种可能的结果输出数组
char[] result = new char[arr.length];
// 标记数组,记录数字是否被用过(1为用过)
int[] tagArray = new int[arr.length];
int count = 0;
/**
* DFS
*
* @param layer
* 深度
*/
public void fullPermutation(int layer) {
// 递归到最后一层的下一层,打印
if (layer > arr.length - 1) {
count++;
} else {
for (int i = 0; i < arr.length; i++) {
// 如果此数在本次深度下未使用过
if (tagArray[i] == 0) {
tagArray[i] = 1;
result[layer] = arr[i];
fullPermutation(++layer);
tagArray[i] = 0;
layer--;
}
}
}
}
public static void main(String[] args) {
Main main = new Main();
main.fullPermutation(0);
System.out.println(main.count);
}
}
次排序算法的应用例子:https://blog.csdn.net/qq_42013035/article/details/103505922