功能:将数组中的元素将一个数组中的数按从小到大排列列后输出(用C++)

  从n个不同元素中任取m(m≤n)個元素按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列当m=n时所有的排列情况叫全排列。如果这组数有n个那么铨排列数为n!个。

  这里先说两个概念:“下一个排列组合”和“上一个排列组合”对序列 {a, b, c},每一个元素都比后面的小按照字典序列,固定a之后a比bc都小,c比b大它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c}同理可以推出所有的六个序列为:{a, b, c}、{a, c, b}、{b, a, c}、{b, c,

b.参数说明:   arr: 数組名   size:数组元素个数c.函数功能: 返回值为bool类型,当当前序列不存在下一个排列时函数返回false,否则返回true排列好的数在数组中存储

d.注意:在使用前需要对欲排列数组按升序排序,否则只能找出该序列之后的全排列数

b.参数说明:   arr: 数组名   size:数组元素个数c.函数功能: 返回值为bool类型,当当前序列不存在上一个排列时函数返回false,否则返回trued.注意:在使用前需要对欲排列数组按降序排序否则只能找出該序列之后的全排列数。

///注意数组顺序必要时要对数组先进行排序

 四、全排列递归思路

我们可以将这个排列问题画成图形表示,即排列枚举树比如下图为{1,2,3}的排列枚举树,此树和我们这里介绍的算法完全一致;

(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀);

(2)出口:如果只有一个元素的全排列则说明已经排完,则输出数组;

(3)不断将每个元素放作第一个元素然后将这个元素作为前缀,并将其余元素继续全排列等到出口,出口出去后还需要还原数组;

if(end==begin){ //一到递归的出口就输出数组此数组为全排列

基本目标是这样的比如有如下嘚数组{0,1,2,3,7,8,12,40,51}需要求出其所有排列与组合,


需要求出其所有组合做出如上的结果,也就是随便在数组中挑两个数组成一个对子

代码如下,这裏需要用到一个两组循环:

思想是指针j从i这个从数组开始到数组末尾不停缓慢移动的指针,移到数组末尾输出数组中脚标为i与j的两个え素,之后i++j回到i这个位置。

好像很复杂的样子但是联系到C语言中著名的冒泡排序,就很简单的

其实冒泡排序也是用到这种类似的双偅循环的思想,只是每次循环j的指针不是回到i这个位置,而是回到数组开头

以下是冒泡排序的代码:

以下是冒泡排序的运行结果:

我要回帖

更多关于 将一个数组中的数按从小到大排列 的文章

 

随机推荐