package bin.main;
/**java实现全排列
*
* 时间复杂度:O(n^n)
* 空间:O(n)
*
*
* @author 牵手无奈
* date:2015-8-18
*
*/
public class Main1 {
/**
* 统计全排列的数量
*/
public static int count=0;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] array = {1,2,3,4,5};
prepare(array);
}
/**进行准备工作
* @param array
*/
public static void prepare(int[] array){
int[] temp = new int[array.length];//用来保存产生每一个组合
boolean[] selected = new boolean[array.length];//用来保存标注哪些数据已经被选中了
fullArray(array, temp, selected, 0);
System.out.println("count="+count);
}
/**核心函数,递归算法
* @param array
* @param temp
* @param selected
* @param index
*/
public static void fullArray(int[] array,int[] temp,boolean[] selected,int index){
if(index==array.length){//当全部元素都选了,就输出
printArray(temp);
count ++;
}
for(int i=0;i<array.length;i++){//如果还有元素没有选,则选择剩下的元素
if(!selected[i]){//选择剩下没有被选过的元素
selected[i]=true;//选中后,标记为已选
temp[index]=array[i];//把选中的元素加到临时数据里
fullArray(array, temp, selected, ++index);//递归调用
--index;
selected[i]=false;
}
}
}
/**辅助函数,用来打印数组
* @param array
*/
public static void printArray(int[] array){
for(int i:array){
System.out.print(i+" ");
}
System.out.println();
}
}
java实现全排列
最新推荐文章于 2024-08-02 23:39:08 发布