本篇文章是对php中的常用算法以及时间复杂度进行了详细的分析介绍
需要的朋友参考下
按数量级递增排列常见的时间复杂度有常数阶O()对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n)立方阶O(n)
复制代码 代码如下:
//二分查找O(log
n)
function erfen($a
$l
$h
$f){
if($l >$h){ return false;}
$m = intval(($l+$h)/
);
if ($a[$m] == $f){
return $m;
}elseif ($f < $a[$m]){
return erfen($a
$l
$m
$f);
}else{
return erfen($a
$m+
$h
$f);
}
}
$a = array(
);
var_dump(erfen($a
));
//遍历树O(log
n)
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(log
n)
function jc($n){
if($n<=
){
return
;
}else{
return $n*jc($n
);
}
}
//快速查找 O(n *log
(n))
function kuaisu($a){
$c = count($a);
if($c <=
){return $a;}
$l = $r = array();
for ($i=
;$i<$c;$i++){
if($a[$i] < $a[
]){
$l[] = $a[$i];
}else{
$r[] = $a[$i];
}
}
$l = kuaisu($l);
$r = kuaisu($r);
return array_merge($l
array($a[
])
$r);
}
//插入排序 O(N*N)
function charu($a){
$c = count($a);
for($i=
;$i<$c;$i++){
$t = $a[$i];
for($j=$i;$j>
&& $a[$j
]>$t;$j
){
$a[$j] = $a[$j
];
}
$a[$j] = $t;
}
return $a;
}
//选择排序O(N*N)
function xuanze($a){
$c = count($a);
for($i=
;$i<$c;$i++){
for ($j=$i+
;$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=
;$i<$c;$i++){
for ($j=$c
;$j>$i;$j
){
if($a[$j] < $a[$j
]){
$t = $a[$j
];
$a[$j
] = $a[$j];
$a[$j] = $t;
}
}
}
return $a;
}
复制代码 代码如下:
/**
* 排列组合
* 采用二进制方法进行组合的选择如表示选时只需有位为就可以了所以可得到的组合是 等种组合
*
* @param 需要排列的数组 $arr
* @param 最小个数 $min_size
* @return 满足条件的新数组组合
*/
function plzh($arr$size=) {
$len = count($arr);
$max = pow($len);
$min = pow($size);
$r_arr = array();
for ($i=$min; $i<$max; $i++){
$count = ;
$t_arr = array();
for ($j=; $j<$len; $j++){
$a = pow( $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());
var_dump($pl);