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之数据库操作详解及乱码解决!
Jan 02 PHP
php 文件缓存函数
Oct 08 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
php遍历文件夹和文件列表示例分享
Mar 11 PHP
php读取大文件示例分享(文件操作类)
Apr 13 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php实现三级级联下拉框
Apr 17 PHP
php metaphone()函数及php localeconv() 函数实例解析
May 15 PHP
php pdo oracle中文乱码的快速解决方法
May 16 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
Aug 17 PHP
PHP简单实现循环链表功能示例
Nov 10 PHP
PHP获取访问设备信息的方法示例
Feb 20 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语法(1)
2006/10/09 PHP
木翼下载系统中说明的PHP安全配置方法
2007/06/16 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
详解PHP5.6.30与Apache2.4.x配置
2017/06/02 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
用JQuery 实现的自定义对话框
2007/03/24 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
jQuery DOM操作实例
2014/03/05 Javascript
javascript实现超炫的向上滑行菜单实例
2015/08/03 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
使用veloticy-ui生成文字动画效果
2018/02/08 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
解决Vue+Electron下Vuex的Dispatch没有效果问题
2019/05/20 Javascript
vue跳转方式(打开新页面)及传参操作示例
2020/01/26 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
python 读取摄像头数据并保存的实例
2018/08/03 Python
python实现简单的文字识别
2018/11/27 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
pygame实现非图片按钮效果
2019/10/29 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Python字符串格式化常用手段及注意事项
2020/06/17 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
泰国折扣酒店预订:Hotels2Thailand
2018/03/20 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
考试退步检讨书
2014/01/15 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
企业金融服务方案
2014/06/03 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书