PHP面試常用算法(推薦)
來(lái)源:易賢網(wǎng) 閱讀:578 次 日期:2016-08-11 15:05:09
溫馨提示:易賢網(wǎng)小編為您整理了“PHP面試常用算法(推薦)”,方便廣大網(wǎng)友查閱!

下面小編就為大家?guī)?lái)一篇PHP面試常用算法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。

一、冒泡排序

基本思想:

對(duì)需要排序的數(shù)組從后往前(逆序)進(jìn)行多遍的掃描,當(dāng)發(fā)現(xiàn)相鄰的兩個(gè)數(shù)值的次序與排序要求的規(guī)則不一致時(shí),就將這兩個(gè)數(shù)值進(jìn)行交換。這樣比較?。ù螅┑臄?shù)值就將逐漸從后面向前面移動(dòng)。

//冒泡排序

<?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));

?>

二、快速排序

基本思想:

在數(shù)組中挑出一個(gè)元素(多為第一個(gè))作為標(biāo)尺,掃描一遍數(shù)組將比標(biāo)尺小的元素排在標(biāo)尺之前,將所有比標(biāo)尺大的元素排在標(biāo)尺之后,通過(guò)遞歸將各子序列分別劃分為更小的序列直到所有的序列順序一致。

//快速排序

<?php

  //快速排序

    function quick_sort($arr) 

    {

      //先判斷是否需要繼續(xù)進(jìn)行

      $length = count($arr);

      if($length <= 1) 

      {

        return $arr;

      }

     

      $base_num = $arr[0];//選擇一個(gè)標(biāo)尺 選擇第一個(gè)元素

      //初始化兩個(gè)數(shù)組

      $left_array = array();//小于標(biāo)尺的

      $right_array = array();//大于標(biāo)尺的

      for($i=1; $i<$length; $i++) 

      {      //遍歷 除了標(biāo)尺外的所有元素,按照大小關(guān)系放入兩個(gè)數(shù)組內(nèi)

        if($base_num > $arr[$i]) 

        {

          //放入左邊數(shù)組

          $left_array[] = $arr[$i];

        } 

        else

        {

          //放入右邊

          $right_array[] = $arr[$i];

        }

      }

      //再分別對(duì) 左邊 和 右邊的數(shù)組進(jìn)行相同的排序處理方式

      //遞歸調(diào)用這個(gè)函數(shù),并記錄結(jié)果

      $left_array = quick_sort($left_array);

      $right_array = quick_sort($right_array);

      //合并左邊 標(biāo)尺 右邊

      return array_merge($left_array, array($base_num), $right_array);

    }

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

    var_dump(quick_sort($arr));

?>

三、二分查找

基本思想:

假設(shè)數(shù)據(jù)是按升序排序的,對(duì)于給定值x,從序列的中間位置開(kāi)始比較,如果當(dāng)前位置值等于x,則查找成功;若x小于當(dāng)前位置值,則在數(shù)列的前半段中查找;若x大于當(dāng)前位置值則在數(shù)列的后半段中繼續(xù)查找,直到找到為止。(數(shù)據(jù)量大的時(shí)候使用)

//二分查找

<?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));

?>

四、順序查找

基本思想:

從數(shù)組的第一個(gè)元素開(kāi)始一個(gè)一個(gè)向下查找,如果有和目標(biāo)一致的元素,查找成功;如果到最后一個(gè)元素仍沒(méi)有目標(biāo)元素,則查找失敗。

//順序查找 

<?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;

    }

  }

?>

五、寫(xiě)一個(gè)函數(shù),能夠遍歷一個(gè)文件下的所有文件和子文件夾

<?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('../'));

?>

六、寫(xiě)一個(gè)函數(shù),盡可能高效的從一個(gè)標(biāo)準(zhǔn)url中取出文件的擴(kuò)展名

<?php

  function getExt($url)

  {

    $arr = parse_url($url);//parse_url解析一個(gè) URL 并返回一個(gè)關(guān)聯(lián)數(shù)組,包含在 URL 中出現(xiàn)的各種組成部分

    //'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函數(shù)返回路徑中的文件名部分

    $ext = explode('.', $file);

    return $ext[count($ext)-1];

  }

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

?>

七、實(shí)現(xiàn)中文字符串截取無(wú)亂碼的方法

可使用mb_substr,但是需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在并且沒(méi)有被注釋掉,否則會(huì)出現(xiàn)未定義函 數(shù)的問(wèn)題。

以上這篇PHP面試常用算法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:PHP面試常用算法(推薦)
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)