php算法
// 算法
// 1.冒泡排序 => 思路:每次循环排列出一个最大的数
// echo '<pre>';
$arr = [
1,43,54,62,21,66,32,78,36,76,39
];//11
function getPao($arr){
$len = count($arr);
for($i=1;$i<$len;$i++){
for($j=0;$j<$len-$i;$j++){
if($arr[$j]>$arr[$j+1]){
$tmp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
// $arr = getPao($arr);
// var_dump($arr);
// 2. 选择排序
function selectSort($arr){
for($i=0,$len=count($arr);$i<$len-1;$i++){
$p = $i;
for($j=$i+1;$j<$len;$j++){
if($arr[$p]>$arr[$j]){
$p=$j;
}
}
if($p != $i){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
var_dump($arr);echo '<br/>';
}
return $arr;
}
$arr = selectSort($arr);exit;
// var_dump($arr);
/*
$arr = [
1,43,54,62,21,66,32,78,36,76,39
];//11
*/
// 3 插入排序
function insertSort($arr){
for($i=1,$len=count($arr);$i<$len;$i++){
$tmp = $arr[$i];
for($j=$i-1;$j>=0;$j--){
if($tmp < $arr[$j]){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}else{
break;
}
}
// var_dump($arr);echo '<br/>';
}
return $arr;
}
// $arr = insertSort($arr);exit;
// var_dump($arr);
// 4.快速排序
/*
思路:先对数组进行分割, 把大的元素数值放到一个临时数组里,把小的元素数值放到另一个临时数组里(这个分割的点可以是数组中的任意一个元素值,一般用第一个元素,即$array[0]),然后继续把这两个临时数组重复上面拆分,
最后把小的数组元素和大的数组元素合并起来。这里用到了递归的思想。
*/
function quick_sork($arr){
if (!is_array($arr)) return ;
$length = count($arr);
if($length<=1) return $arr;
$left = $right = [];
for($i=1;$i<$length;$i++){
if($arr[$i]<$arr[0]){
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
$left = quick_sork($left);
$right = quick_sork($right);
return array_merge($left,[$arr[0]],$right);
}
$arr = quick_sork($arr);
var_dump($arr);
// 参考资料:https://www.cnblogs.com/isykw/p/6115461.html
// 5. 二分查找法
// 二分查找的数组必须是排列好的
function binSearch($arr,$search){
$height = count($arr)-1;
$low = 0;
while($low<=$height){
$mid = floor(($low+$height)/2);// 获取中间数
if($arr[$mid] == $search){
return $mid;
}elseif($arr[$mid] < $search){
$low = $mid+1;
}elseif($arr[$mid] >$search){
$height = $mid-1;
}
}
return '查找失败';
}
// $search = binSearch($arr,43);
// var_dump($search);
// 二分查找递归实现
function binSearch2($arr,$low,$height,$k){
if($low<=$height){
$mid = floor(($low+$height)/2);
if($arr[$mid] == $k){
return $mid;
}elseif($arr[$mid]<$k){
return binSearch2($arr,$mid+1,$height,$k);
}elseif($arr[$mid]>$k){
return binSearch2($arr,$low,$mid-1,$k);
}
}
return -1;
}
$search = binSearch($arr,43);
var_dump($search);
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要
PHP进阶架构师>>>视频、面试文档免费获取docs.qq.com或者关注咱们下面的专栏
PHP架构师之路zhuanlan.zhihu.com来源:https://www.cnblogs.com/myvic/p/8342119.html