源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

php 常用算法和时间复杂度

  • 时间:2022-09-27 07:11 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php 常用算法和时间复杂度
按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)
[u]复制代码[/u] 代码如下:
//二分查找O(log2n) function erfen($a,$l,$h,$f){     if($l >$h){ return false;}     $m = intval(($l+$h)/2);     if ($a[$m] == $f){         return $m;     }elseif ($f < $a[$m]){         return erfen($a, $l, $m-1, $f);     }else{         return erfen($a, $m+1, $h, $f);     } } $a = array(1,12,23,67,88,100); var_dump(erfen($a,0,5,1)); //遍历树O(log2n) function bianli($p){     $a = array();     foreach (glob($p.'/*') as $f){         if(is_dir($f)){             $a = array_merge($a,bianli($f));         }else{             $a[] = $f;         }     }     return $a; } //阶乘O(log2n) function jc($n){     if($n<=1){         return 1;     }else{         return $n*jc($n-1);     }    } //快速查找  O(n *log2(n)) function kuaisu($a){     $c = count($a);     if($c <= 1){return $a;}     $l = $r = array();        for ($i=1;$i<$c;$i++){         if($a[$i] < $a[0]){             $l[] = $a[$i];         }else{             $r[] = $a[$i];         }     }     $l = kuaisu($l);     $r = kuaisu($r);     return array_merge($l,array($a[0]),$r); } //插入排序  O(N*N) function charu($a){   $c = count($a);   for($i=1;$i<$c;$i++){       $t = $a[$i];       for($j=$i;$j>0 && $a[$j-1]>$t;$j--){           $a[$j] = $a[$j-1];                }       $a[$j] = $t;   }   return $a; } //选择排序O(N*N) function xuanze($a){     $c = count($a);     for($i=0;$i<$c;$i++){         for ($j=$i+1;$j<$c;$j++){             if($a[$i]>$a[$j]){                 $t = $a[$j];                 $a[$j] = $a[$i];                 $a[$i] = $t;              }         }     }     return $a; } //冒泡排序   O(N*N) function maopao($a){     $c = count($a);     for($i=0;$i<$c;$i++){         for ($j=$c-1;$j>$i;$j--){             if($a[$j] < $a[$j-1]){                $t = $a[$j-1];                $a[$j-1] = $a[$j];                $a[$j] = $t;             }         }        }     return $a; }
[u]复制代码[/u] 代码如下:
/**  * 排列组合  * 采用二进制方法进行组合的选择,如表示5选3时,只需有3位为1就可以了,所以可得到的组合是 01101 11100 00111 10011 01110等10种组合  *  * @param 需要排列的数组 $arr  * @param 最小个数 $min_size  * @return 满足条件的新数组组合  */ function plzh($arr,$size=5) {   $len = count($arr);   $max = pow(2,$len);   $min = pow(2,$size)-1;   $r_arr = array();   for ($i=$min; $i<$max; $i++){    $count = 0;    $t_arr = array();    for ($j=0; $j<$len; $j++){     $a = pow(2, $j);     $t = $i&$a;     if($t == $a){      $t_arr[] = $arr[$j];      $count++;     }    }      if($count == $size){     $r_arr[] = $t_arr;       }     }   return $r_arr;  } $pl = pl(array(1,2,3,4,5,6,7),5); var_dump($pl);
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部