博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
字典排序算法实现全排列
阅读量:5011 次
发布时间:2019-06-12

本文共 1419 字,大约阅读时间需要 4 分钟。

相关资料免积分下载:

字典排序算法实现全排列的步骤:

总结:

1.从右向左找,找到第一个比下一个元素还小的地方,记下位置,标注为左元素。
2.从右向左找,找到第一个比左元素大的元素,记下位置,标注为右元素。
3.交换左元素和右元素。
4.不管现在左元素位置上放的是谁,将左元素右边的序列逆序。
5.这样就得到了一个新数了。
6.可以继续重复1-5,来继续得到下一个排列。
7.如果再也找不到一个比下一个元素还小的地方,那么意味着这个序列已经降序了,排列完成了,那就结束吧。

代码如下:

";}/** * 交换值 * * @param string $a * @param string $b */function swap(&$a,&$b){ $temp= $a; $a = $b; $b = $temp;}/** * 将第$m个和$n个之间的数据倒置排序 * * @param int $m 数组中的位序$m * @param int $n 数组中的位序$n */function convert($m,$n){ global $array;//全局数组 for ($i=$m,$j=$n;$j>$i;$i++,$j--) swap($array[$i],$array[$j]);}/** * 对1~n进行全排列 * * @param int $num 元素的总个数 * @return 1 */function dictionary_sort($num){ global $array;//全局数组 if ($num==1){ echo "1
"; return 1; } while (1){ printArr($num); //打印数组 for ($i=$num-2;$i>=0;$i--){ //步骤1:从后向前找,找到第一个比下一个元素还小的地方,记下位置,标注$i if ($array[$i]<$array[$i+1])break;//得到$i if ($i==0)return 1; //函数出口 } for ($j=$num-1;$j>$i;$j--){ //步骤2:从后向前找,找到第一个比$i元素大的元素,记下位置,标注为$j if ($array[$j]>$array[$i])break; } swap($array[$i],$array[$j]);//步骤3:交换$array[$i]和$array[$j]的数据 convert($i+1,$num-1); //步骤4: 将$i个元素右边的序列逆序 }}$array=array();$num=5;for ($i=0;$i<$num;$i++){ $array[$i]=$i+1;}dictionary_sort($num);

原创文章:

转载请注明出处:

转载于:https://www.cnblogs.com/hongfei/archive/2012/10/18/2719680.html

你可能感兴趣的文章
记忆--1.致我们不可缺少的记忆
查看>>
lintcode28- Search a 2D Matrix- easy
查看>>
react项目
查看>>
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰(转)
查看>>
A Simple Tree Problem
查看>>
Modular Inverse [ZOJ 3609]
查看>>
MySQL性能测试工具之mysqlslap使用详解
查看>>
深入理解jsonp跨域请求原理
查看>>
regsvr32注册COM组件失败
查看>>
jmeter,CSV数据加载、数据库连接、正则
查看>>
(独孤九剑)--正则表达式
查看>>
MySQL学习点滴 --分区表
查看>>
4.6.1 测试基础
查看>>
洛谷 P2486 [SDOI2011]染色
查看>>
oo第三单元总结
查看>>
leetcode : Count and Say [基本功]
查看>>
洛谷 P2485 [SDOI2011]计算器 解题报告
查看>>
c#访问存储过程
查看>>
Slickflow.NET 开源工作流引擎基础介绍(三) -- 基于HTML5/Bootstrap的Web流程设计器
查看>>
Node教程
查看>>