处理十一位数据排序的全排列

排列:从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计算)

完整代码以及程序运行结果:

 

}

问题描述:对n个元素进行全排列列出所有情况,例如12,3三个数字会得到1 2 31 3 2,2 1 32 3 1,3 1 23 2 1这6中情况

注:Perm(k,m)利用递归的思想即可不断划分前缀,直到只剩下1个元素则只有一种凊况,即为找到了一种排列

 
}
//p为当前排列hashTable记录整数x是否已经茬p中
//当前处理排列的低index号位

在理解过程中,对于index和x的认知不够使得自己怎么都理解不了,使用codeblocks的debug让我有了一丝丝的理解 

}

我要回帖

更多关于 数据排序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信