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 相关文章推荐
用PHP读取IMAP邮件
Oct 09 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
php 格式化数字的时候注意数字的范围
Apr 13 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
php中使用PHPExcel读写excel(xls)文件的方法
Sep 15 PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
PHP开启opcache提升代码性能
Apr 26 PHP
PHP使用栈解决约瑟夫环问题算法示例
Aug 27 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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类的反射用法实例
2014/11/03 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
浅析JavaScript 箭头函数 generator Date JSON
2016/05/23 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
微信小程序商品详情页底部弹出框
2019/11/22 Javascript
python实现多线程暴力破解登陆路由器功能代码分享
2015/01/04 Python
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python根据日期返回星期几的方法
2015/07/06 Python
对numpy中轴与维度的理解
2018/04/18 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
python3.7 的新特性详解
2019/07/25 Python
python类中super() 的使用解析
2019/12/19 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python 读取位于包中的数据文件
2020/08/07 Python
python 实现汉诺塔游戏
2020/11/28 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
Lookfantastic台湾:英国彩妆美发保养购物网
2018/03/26 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
墨尔本复古时尚品牌:Dangerfield
2018/12/12 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
导购员的岗位职责
2014/02/08 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
审计专业自荐信范文
2014/04/21 职场文书
小学生美德少年事迹材料
2014/08/24 职场文书
个性与发展自我评价
2015/03/06 职场文书
在人间读书笔记
2015/06/30 职场文书
2016年教师节慰问信
2015/12/01 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers
pandas中pd.groupby()的用法详解
2022/06/16 Python