当前位置: 首页 > 后端技术 > PHP

PHPer面试指南-算法

时间:2023-03-29 15:13:05 PHP

本书GitHub地址:https://github.com/todayqq/PH...算法可以说是各大厂商的必考题。对于算法,你必须了解它们的本质和原理。冒泡排序冒泡排序的原理:一组数据,比较相邻数据的大小,值小的数据放在前面,值大的数据放在后面。函数bubble_sort($arr){$count=count($arr);如果(0==$count){返回假;}for($i=0;$i<$count;$i++){for($j=0;$j<$count-1-$i;$j++){  if($arr[$j]>$arr[$j+1]){  $temp=$arr[$j];  $arr[$j]=$arr[$j+1];  $arr[$j+1]=$temp;  }  }}返回$arr;}这样一个数组array(6,3,8,2,9,1),排序过程是怎样的呢?细节不过多讨论。如果你有兴趣,可以从延伸阅读中找到答案。快速排序快速排序是对冒泡排序的改进。实现思路是:通过one-pass排序将待排序记录分成独立的两部分,其中一部分记录的关键字小于另一部分记录的关键字,则可以快速将两部分记录分别排序,整个排序过程可以递归进行,达到对整个序列排序的目的。简单来说:找到当前数组中的任意一个元素(一般选择第一个元素),作为目标,创建两个空数组,遍历整个数组元素,如果遍历到的元素小于当前元素,则放入左数组,否则将其放入右数组,然后对新数组执行相同的操作。函数quick_sort($arr){$count=count($arr);if(1>=$count){返回arr;}$base_num=$arr[0];//选择目标$left_array=array();//小于目标$right_array=array();//大于目标for($i=1;$i<$count;$i++){if($base_num>$arr[$i]){$left_array[]=$arr[$i];}else{$right_array[]=$arr[$i];}}//然后对左右数组进行同样的排序方法$left_array=quick_sort($left_array);$right_array=quick_sort($right_array);//最后合并returnarray_merge($left_array,array($base_num),$right_array);}二分查找(对半查找)实现思路:将表中间记录的关键字与查找关键字进行比较,如果两者是相等,查找成功;否则,中间位置记录用于将表分成前后两个子表。一张儿童桌。函数binSearch($arr,$target){$height=count($arr)-1;$低=0;while($low<=$height){$mid=floor(($low+$height)/2);//获取中间数//两个值相等,返回if($arr[$mid]==$target){返回$mid;//元素大于target,找到左边的部分}elseif($arr[$mid]<$target){$low=$mid+1;//元素比target小,找对的部分}elseif($arr[$mid]>$target){$height=$mid-1;}}返回“查找失败”;}延伸阅读PHP冒泡排序php实现快速排序PHP实现各种经典算法PHP常用算法-面试篇php实现二分查找法