Heim >Backend-Entwicklung >PHP-Tutorial >Häufig verwendete Algorithmen für PHP-Interviews (empfohlen)_php-Beispiele

Häufig verwendete Algorithmen für PHP-Interviews (empfohlen)_php-Beispiele

WBOY
WBOYOriginal
2016-08-04 08:56:44931Durchsuche

1. Blasensortierung

Grundidee:

Durchsuchen Sie das zu sortierende Array mehrmals von hinten nach vorne (in umgekehrter Reihenfolge). Wenn festgestellt wird, dass die Reihenfolge zweier benachbarter Werte nicht mit den für die Sortierung erforderlichen Regeln übereinstimmt, werden die beiden Werte angezeigt ​​werden ausgetauscht. Auf diese Weise bewegen sich die kleineren (größeren) Werte allmählich von hinten nach vorne.

//Blasensortierung

<&#63;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));
&#63;>

2. Schnelle Sortierung

Grundidee:

Wählen Sie ein Element (meistens das erste) im Array als Lineal aus, scannen Sie das Array einmal und sortieren Sie die Elemente, die kleiner als das Lineal sind, vor dem Lineal, und sortieren Sie alle Elemente, die größer als das Lineal sind, nach dem Lineal und rekursieren Sie jedes Element. Die Teilsequenzen werden in kleinere Sequenzen unterteilt, bis alle Sequenzen in derselben Reihenfolge sind.

//Schnellsortierung

<&#63;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));

&#63;>

3. Binäre Suche

Grundidee:

Gehen Sie davon aus, dass die Daten in aufsteigender Reihenfolge sortiert sind. Beginnen Sie den Vergleich an der mittleren Position der Sequenz. Wenn der aktuelle Positionswert gleich x ist, ist die Suche erfolgreich der aktuelle Positionswert, dann befindet er sich in der ersten Hälfte der Sequenz. Wenn x größer als der aktuelle Positionswert ist, wird in der zweiten Hälfte der Sequenz weiter gesucht, bis er gefunden wird. (Verwenden Sie es, wenn die Datenmenge groß ist)

//Binäre Suche

<&#63;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));
&#63;>

4. Sequentielle Suche

Grundidee:

Beginnen Sie mit dem ersten Element des Arrays und suchen Sie nacheinander nach unten. Wenn ein Element vorhanden ist, das mit dem Ziel übereinstimmt, ist die Suche erfolgreich. Wenn bis zum letzten Element immer noch kein Zielelement vorhanden ist, schlägt die Suche fehl.

//Sequentielle Suche

<&#63;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;
    }
  }
&#63;>

5. Schreiben Sie eine Funktion, die alle Dateien und Unterordner unter einer Datei durchlaufen kann

<&#63;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('../'));
&#63;>

6. Schreiben Sie eine Funktion, um die Dateierweiterung so effizient wie möglich aus einer Standard-URL zu extrahieren

<&#63;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&#63;id=1'));

&#63;>

7. Methoden zum Abfangen chinesischer Zeichenfolgen ohne verstümmelte Zeichen

Sie können mb_substr verwenden, müssen jedoch sicherstellen, dass php_mbstring.dll in php.ini geladen ist. Stellen Sie also sicher, dass die Zeile „extension=php_mbstring.dll“ vorhanden und nicht auskommentiert ist, da sonst das Problem auftritt Es kommt zu einer Reihe undefinierter Funktionen.

Die oben genannten häufig verwendeten Algorithmen für PHP-Interviews (empfohlen) sind alle vom Herausgeber geteilten Inhalte. Ich hoffe, dass sie Ihnen eine Referenz geben können, und ich hoffe, dass Sie Script Home unterstützen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn