这种方法是我左思右想想出来的,方法很笨,效率很低
有兴趣的看一下
有兴趣的看一下
<?php
function full_sort($array){
$len = count($array);
for($i=0;$i<$len;$i++){
$a[] = 0;
$numr[] = $i;
}
for($a[$len-1]=0;$a[$len-1]<=$len;$a[$len-1]++){
if($a[0]==$len) break;
for($i=1;$i<$len;$i++){
if($a[$i]==$len){
$a[$i-1]++;
for($j=$i;$j<$len-1;$j++){
$a[$i]=0;
}
$a[$len-1]=-1;
$skip=true;
break;
}
}
if($skip){
$skip=false;
continue;
}
$pass =1;
foreach($numr as $num){
if(in_array($num,$a)){
$pass *= 1;
}else{
$pass *= 0;
}
}
if($pass){
$k++;
for($i=0;$i<$len;$i++){
$str.= $array[$a[$i]];
}
$str.= "<br>";
}
}
$str.=$k;
return $str;
}
$array = array("a","b","c","d","e","f");
echo full_sort($array);
?>
楼上递归的很好
php中的函数我知道的很少
array_shift()
array_unshift()
array_push()
我都不知道干什么的
在我机子上运行你的代码用时:0.231194972992秒
在你机子上试试这个
这个执行时间:0.0428099632263秒
我研究这个是想用来计算行列式
我的这个方法虽然已经够快了,还是不行,10个以上字符我电脑CPU 99%被apache占了,好长一段时间都不出结果,
也不知道到底要用多长时间,总之计算不出来了,这种用来开发web的语言不适于用来计算这些东西
php中的函数我知道的很少
array_shift()
array_unshift()
array_push()
我都不知道干什么的
在我机子上运行你的代码用时:0.231194972992秒
在你机子上试试这个
<?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","f","g");
set_time_limit(0);
$begin = explode(' ', microtime());
$comeonbaby = gosort($array,7);
$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}秒";
?>
这个执行时间:0.0428099632263秒
我研究这个是想用来计算行列式
我的这个方法虽然已经够快了,还是不行,10个以上字符我电脑CPU 99%被apache占了,好长一段时间都不出结果,
也不知道到底要用多长时间,总之计算不出来了,这种用来开发web的语言不适于用来计算这些东西