发表个递归求全排列
时间:2006-12-31
来源:互联网
算法说明
假如字符
123
先把1留下,
然后在把2,3作为一个数组递归获得两个排列$rs_array=("23","32");
然后在遍历$rs_array,每个元素于留下的1合并得到$rs_array("123","132");
然后在把2留下,
把1,3作为一个数组递归获得两个排列$rs_array=("13","31");
然后在遍历$rs_array,每个元素于留下的2合并得到$rs_array("123","132","213","231");
再把3留下,
把1,2作为一个数组递归获得两个排列$rs_array=("12","21");
然后在遍历$rs_array,每个元素于留下的2合并得到$rs_array("123","132","213","231","312","321");
OK?
思想就在这里,高手的话,改改,让运行速度更快
假如字符
123
先把1留下,
然后在把2,3作为一个数组递归获得两个排列$rs_array=("23","32");
然后在遍历$rs_array,每个元素于留下的1合并得到$rs_array("123","132");
然后在把2留下,
把1,3作为一个数组递归获得两个排列$rs_array=("13","31");
然后在遍历$rs_array,每个元素于留下的2合并得到$rs_array("123","132","213","231");
再把3留下,
把1,2作为一个数组递归获得两个排列$rs_array=("12","21");
然后在遍历$rs_array,每个元素于留下的2合并得到$rs_array("123","132","213","231","312","321");
OK?
思想就在这里,高手的话,改改,让运行速度更快
复制PHP内容到剪贴板
<?php
function gosort($array,$len){
if($len<=2){
$rs_array[0]=$array[0].$array[1];
$rs_array[1]=$array[1].$array[0];
}else{
for($i=0;$i<$len;$i++){
$leave_one=$array[$i];
$k=0;
for($j=0;$j<$len;$j++){
if($j==$i){
continue;
}else{
$tosent[$k]= $array[$j];
$k++;
}
}
$fetch = gosort($tosent,$len-1);
foreach($fetch as $comein){
$rs_array[] = $leave_one.$comein;
}
}
}
return $rs_array;
}
//example
$array =array("a","b","c","d","e");
set_time_limit(0);
$begin = explode(' ', microtime());
$comeonbaby = gosort($array,5);
$f=0;
foreach($comeonbaby as $menu){
echo $menu."<br>";
$f++;
}
echo $f;
$end = explode(' ', microtime());
$time = ($end[0]+$end[1]) - ($begin[0]+$begin[1]);
echo '<br>';
echo "执行时间:{$time}秒";
?>
[ 本帖最后由 muqiao 于 2006-12-30 23:25 编辑 ] PHP代码:
<?php
function gosort($array,$len){
if($len<=2){
$rs_array[0]=$array[0].$array[1];
$rs_array[1]=$array[1].$array[0];
}else{
for($i=0;$i<$len;$i++){
$leave_one=$array[$i];
$k=0;
for($j=0;$j<$len;$j++){
if($j==$i){
continue;
}else{
$tosent[$k]= $array[$j];
$k++;
}
}
$fetch = gosort($tosent,$len-1);
foreach($fetch as $comein){
$rs_array[] = $leave_one.$comein;
}
}
}
return $rs_array;
}
//example
$array =array("a","b","c","d","e");
set_time_limit(0);
$begin = explode(' ', microtime());
$comeonbaby = gosort($array,5);
$f=0;
foreach($comeonbaby as $menu){
echo $menu."<br>";
$f++;
}
echo $f;
$end = explode(' ', microtime());
$time = ($end[0]+$end[1]) - ($begin[0]+$begin[1]);
echo '<br>';
echo "执行时间:{$time}秒";
?>
作者: muqiao 发布时间: 2006-12-30
算法很强嘛
作者: leehui1983 发布时间: 2006-12-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28