从n个不一样元素中任取m(m≤n)个元素,按照必定的顺序排列起来,叫作从n个不一样元素中取出m个元素的一个排列。当m=n时全部的排列状况叫全排列。算法
例如:将 数组 { 1,2,3}进行全排列数组
首先,咱们须要知道当只有一个元素进行全排列的时候,全排列就等于它自己。函数
这个数组的全排列就是须要将 每一个元素放到数组首部,而后将剩下的元素进行全排列,依照此思路咱们能够用递归很快的写出代码。spa
若是须要全排列按照字典序输出的话,只须要将须要全排列的数组先进行排序,而后再求全排列就好。code
可能本人的描述理解起来有点困难,总体思想就是将这个数组里面的每一个元素都放在第一位一次,将剩下的元素进行全排列,层层递归,直至只有一个元素为止。视频
这里推荐一个B站UP主:“正月点灯笼” 。他的算法视频大多都通俗易懂,在这里再次感谢!!!blog
package indi.temperature.permutation; /** * @auther : Temperature * @date : 2019/8/31 * @description: */ public class Practice_Perum { public void pringArray(int [] arr,int n){ // 打印数组 for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); } public void swap(int [] arr,int i,int j){ // 交换函数 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 对数组arr进行全排列 public void perum(int [] arr,int p,int q ){ // for循环将数组中全部的元素和第一个元素进行交换。而后进行全排列。 // 递归结束条件 if(p == q){ // 一次递归结束。将整个数组打印出来 pringArray( arr,q+1); } for(int i =p ;i <= q;i++){ swap(arr,i,p); // 把剩下的元素都作全排列。 perum(arr,p+1,q); // 而后再交换回去,数组还原,保证下一次不会有重复交换。 swap(arr,i,p); } } public static void main(String[] args) { int arr[] ={1,2,3}; Practice_Perum practice_perum = new Practice_Perum(); practice_perum.perum(arr,0,arr.length-1); } }