您的位置:首页 > 编程语言 > Java开发

java实现全排列

2015-08-18 17:56 525 查看
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();
	}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: