PHP面试常用算法(推荐)
来源: 阅读:608 次 日期:2016-08-11 15:05:09
温馨提示: 小编为您整理了“PHP面试常用算法(推荐)”,方便广大网友查阅!

下面小编就为大家带来一篇PHP面试常用算法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。

一、冒泡排序

基本思想:

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

//冒泡排序

<?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面试常用算法(推荐)
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:hfpxwx
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map