排列:从n个元素中任取m个元素並按照一定的顺序进行排列,称为排列;
全排列:当n==m时称为全排列;
比如:集合{ 1,2,3}的全排列为:
(1)n个元素的全排列=(n-1个元素的全排列)+(另┅个元素作为前缀);
(2)出口:如果只有一个元素的全排列,则说明已经排完则输出数组;
(3)不断将每个元素放作第一个元素,然后将这个え素作为前缀并将其余元素继续全排列,等到出口出口出去后还需要还原数组;
黑色方框表示:选取每一个元素作为前缀,后面的数據排序再进行全排列直到待排序队列只有一个元素,这时这一趟排列结束打印出。
//参数说明:arr 数组地址
//head:进行排列的第一个元素下标
//tail:進行排列最后一个元素下标
所以这里用递归的做法,递归结束条件是Perm(1) = arr[x];
if(head == tail)//如果相等 说明遍历到最后没有元素能当前缀,所以这一趟全排列结束 Swap(arr[head],j); //还需要将之前交换的再换回 否则整个数组顺序全被打乱 ////全排列后面的所有元素(这里是head+1而不是head++,head++代表参数++递归的下一个head和上一個head不相同,所以要head+1计算)
完整代码以及程序运行结果: