常用算法和时间复杂度(php)

按数量级递增排列,常见的时间复杂度有:常数阶O(1),对数阶O(log2n),线性阶O(n),线性对数阶O(nlog2n),平方阶O(n2),立方阶O(n3)


//二分查找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;
}










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值