1. 云栖社区>
  2. PHP教程>
  3. 正文

PHP面试常用算法

作者:用户 来源:互联网 时间:2017-12-01 09:27:15

php算法面试常用

PHP面试常用算法 - 摘要: 本文讲的是PHP面试常用算法,   一、冒泡排序   基本思想:     对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。   //冒泡排序 1

  一、冒泡排序

  基本思想:

    对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。

  //冒泡排序

<a href=PHP面试常用算法">PHP面试常用算法
 1 <?php 2  3     function mysort($arr) 4     { 5         for($i = 0; $i < count($arr); $i++) 6         { 7             $isSort = false; 8             for ($j=0; $j< count($arr) - $i - 1; $j++)  9             {10                 if($arr[$j] < $arr[$j+1])11                 {12                     $isSort = true;13                     $temp = $arr[$j];14                     $arr[$j] = $arr[$j+1];15                     $arr[$j+1] = $temp ;16                 }17             }18             if($isSort)19             {20                 break;21             }22         }23         return $arr;24     }25 26     $arr = array(3,1,2);27     var_dump(mysort($arr));28 ?>

 

  二、快速排序

  基本思想:

    在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。

  //快速排序

PHP面试常用算法PHP面试常用算法
 1 <?php 2     //快速排序 3         function quick_sort($arr)  4         { 5             //先判断是否需要继续进行 6             $length = count($arr); 7             if($length <= 1)  8             { 9                 return $arr;10             }11         12             $base_num = $arr[0];//选择一个标尺  选择第一个元素13 14             //初始化两个数组15             $left_array = array();//小于标尺的16             $right_array = array();//大于标尺的17             for($i=1; $i<$length; $i++) 18             {            //遍历 除了标尺外的所有元素,按照大小关系放入两个数组内19                 if($base_num > $arr[$i]) 20                 {21                     //放入左边数组22                     $left_array[] = $arr[$i];23                 } 24                 else 25                 {26                     //放入右边27                     $right_array[] = $arr[$i];28                 }29             }30             //再分别对 左边 和 右边的数组进行相同的排序处理方式31             //递归调用这个函数,并记录结果32             $left_array = quick_sort($left_array);33             $right_array = quick_sort($right_array);34             //合并左边 标尺 右边35             return array_merge($left_array, array($base_num), $right_array);36         }37 38         $arr = array(3,1,2);39         var_dump(quick_sort($arr));40 41 ?>

  

  三、二分查找

  基本思想:

    假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。(数据量大的时候使用)

  //二分查找

PHP面试常用算法PHP面试常用算法
 1 <?php 2     //二分查找 3     function bin_search($arr,$low,$high,$k) 4     { 5         if($low <= $high) 6         { 7             $mid = intval(($low + $high)/2); 8             if($arr[$mid] == $k) 9             {10                 return $mid;11             }12             else if($k < $arr[$mid])13             {14                 return bin_search($arr,$low,$mid-1,$k);15             }16             else17             {18                 return bin_search($arr,$mid+1,$high,$k);19             }20         }21         return -1;22     }23 24     $arr = array(1,2,3,4,5,6,7,8,9,10);25 26     print(bin_search($arr,0,9,3));27 ?>

 

  四、顺序查找

  基本思想:

    从数组的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。

    //顺序查找 

PHP面试常用算法PHP面试常用算法
 1 <?php 2     //顺序查找 3     function seq_search($arr,$n,$k) 4     { 5         $array[$n] = $k; 6         for($i = 0;$i < $n; $i++) 7         { 8             if($arr[$i] == $k) 9             {10                 break;11             }12         }13 14         if($i < $n)15         {16             return $i;17         }18         else19         {20             return -1;21         }22     }23 ?>

  

  五、写一个函数,能够遍历一个文件下的所有文件和子文件夹

PHP面试常用算法PHP面试常用算法
 1 <?php     2     function my_scandir($dir) 3     { 4         $files = array(); 5         if($handle = opendir($dir)) 6         { 7             while (($file = readdir($handle))!== false)  8             { 9                 if($file != '..' && $file != '.')10                 {11                     if(is_dir($dir."/".$file))12                     {13                         $files[$file]=my_scandir($dir."/".$file);14                     }15                     else16                     {17                         $files[] = $file;18                     }19                 }20             }21 22             closedir($handle);23             return $files;24         }25     }26 27     var_dump(my_scandir('../'));28 ?>

  

  六、写一个函数,尽可能高效的从一个标准url中取出文件的扩展名

PHP面试常用算法PHP面试常用算法
 1 <?php 2     function getExt($url) 3     { 4         $arr = parse_url($url);//parse_url解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分 5         //'scheme' => string 'http' (length=4) 6         //'host' => string 'www.sina.com.cn' (length=15) 7         //'path' => string '/abc/de/fg.php' (length=14) 8         //'query' => string 'id=1' (length=4) 9         $file = basename($arr['path']);// basename函数返回路径中的文件名部分10         $ext = explode('.', $file);11         return $ext[count($ext)-1];12     }13 14     print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1'));15 16 ?>

  

  七、实现中文字符串截取无乱码的方法

    可使用mb_substr,但是需要确保在php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并且没有被注释掉,否则会出现未定义函 数的问题。

  

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , 算法 , 面试 常用 ,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备