PHP面试常用算法(推荐)


Posted in PHP onJuly 22, 2016

一、冒泡排序

基本思想:

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

//冒泡排序

<?php

  function mysort($arr)
  {
    for($i = 0; $i < count($arr); $i++)
    {
      $isSort = false;
      for ($j=0; $j< count($arr) - $i - 1; $j++) 
      {
        if($arr[$j] < $arr[$j+1])
        {
          $isSort = true;
          $temp = $arr[$j];
          $arr[$j] = $arr[$j+1];
          $arr[$j+1] = $temp ;
        }
      }
      if($isSort)
      {
        break;
      }
    }
    return $arr;
  }

  $arr = array(3,1,2);
  var_dump(mysort($arr));
?>

二、快速排序

基本思想:

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

//快速排序

<?php
  //快速排序
    function quick_sort($arr) 
    {
      //先判断是否需要继续进行
      $length = count($arr);
      if($length <= 1) 
      {
        return $arr;
      }
    
      $base_num = $arr[0];//选择一个标尺 选择第一个元素

      //初始化两个数组
      $left_array = array();//小于标尺的
      $right_array = array();//大于标尺的
      for($i=1; $i<$length; $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);
      //合并左边 标尺 右边
      return array_merge($left_array, array($base_num), $right_array);
    }

    $arr = array(3,1,2);
    var_dump(quick_sort($arr));

?>

三、二分查找

基本思想:

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

//二分查找

<?php
  //二分查找
  function bin_search($arr,$low,$high,$k)
  {
    if($low <= $high)
    {
      $mid = intval(($low + $high)/2);
      if($arr[$mid] == $k)
      {
        return $mid;
      }
      else if($k < $arr[$mid])
      {
        return bin_search($arr,$low,$mid-1,$k);
      }
      else
      {
        return bin_search($arr,$mid+1,$high,$k);
      }
    }
    return -1;
  }

  $arr = array(1,2,3,4,5,6,7,8,9,10);

  print(bin_search($arr,0,9,3));
?>

四、顺序查找

基本思想:

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

//顺序查找 

<?php
  //顺序查找
  function seq_search($arr,$n,$k)
  {
    $array[$n] = $k;
    for($i = 0;$i < $n; $i++)
    {
      if($arr[$i] == $k)
      {
        break;
      }
    }

    if($i < $n)
    {
      return $i;
    }
    else
    {
      return -1;
    }
  }
?>

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

<?php  
  function my_scandir($dir)
  {
    $files = array();
    if($handle = opendir($dir))
    {
      while (($file = readdir($handle))!== false) 
      {
        if($file != '..' && $file != '.')
        {
          if(is_dir($dir."/".$file))
          {
            $files[$file]=my_scandir($dir."/".$file);
          }
          else
          {
            $files[] = $file;
          }
        }
      }

      closedir($handle);
      return $files;
    }
  }

  var_dump(my_scandir('../'));
?>

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

<?php
  function getExt($url)
  {
    $arr = parse_url($url);//parse_url解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分
    //'scheme' => string 'http' (length=4)
    //'host' => string 'www.sina.com.cn' (length=15)
    //'path' => string '/abc/de/fg.php' (length=14)
    //'query' => string 'id=1' (length=4)
    $file = basename($arr['path']);// basename函数返回路径中的文件名部分
    $ext = explode('.', $file);
    return $ext[count($ext)-1];
  }

  print(getExt('http://www.sina.com.cn/abc/de/fg.html.php?id=1'));

?>

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

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

以上这篇PHP面试常用算法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP5中使用PDO连接数据库的方法
Aug 01 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
PHP 伪静态技术原理以及突破原理实现介绍
Jul 12 PHP
php ckeditor上传图片文件名乱码解决方法
Nov 15 PHP
php向js函数传参的几种方法
Aug 10 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
Sep 06 PHP
php中注册器模式类用法实例分析
Nov 03 PHP
PHP中使用array函数新建一个数组
Nov 19 PHP
php实现页面纯静态的实例代码
Jun 21 PHP
PHP微信模板消息操作示例
Jun 29 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
PHP学习记录之常用的魔术常量详解
Dec 12 PHP
微信红包随机生成算法php版
Jul 21 #PHP
php集成动态口令认证
Jul 21 #PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
Jul 21 #PHP
微信随机生成红包金额算法php版
Jul 21 #PHP
PHP简单读取PDF页数的实现方法
Jul 21 #PHP
基于PHP微信红包的算法探讨
Jul 21 #PHP
php中preg_replace_callback函数简单用法示例
Jul 21 #PHP
You might like
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
两种php实现图片上传的方法
2016/01/22 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
jQuery 表格工具集
2010/04/25 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
Angularjs 基础入门
2014/12/26 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
React Router基础使用
2017/01/17 Javascript
Angular 2父子组件之间共享服务通信的实现
2017/07/04 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
JS实现简易留言板特效
2019/12/23 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
python自定义解析简单xml格式文件的方法
2015/05/11 Python
Python实现针对中文排序的方法
2017/05/09 Python
python交互式图形编程实例(三)
2017/11/17 Python
解决Python3 抓取微信账单信息问题
2019/07/19 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
2020/03/10 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
Linux安装Python3如何和系统自带的Python2并存
2020/07/23 Python
如何使用 Python 读取文件和照片的创建日期
2020/09/05 Python
Ellos丹麦:时尚和服装在线
2016/09/19 全球购物
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
机关搬迁方案
2014/05/18 职场文书
学生干部培训方案
2014/06/12 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android