ホームページ >バックエンド開発 >PHPチュートリアル >PHP で一般的に使用されるアルゴリズム

PHP で一般的に使用されるアルゴリズム

亚连
亚连オリジナル
2018-05-10 09:55:084061ブラウズ

日常の PHP 開発環境では、一般的に使用されるいくつかの PHP アルゴリズムを使用して、いくつかの問題をより効果的に解決することができます。また、いくつかのアルゴリズムを知り、これらのアルゴリズムの核となる考え方を習得することによって、PHP の問題を簡単に解決することができます。

1. バブルソート

基本的なアイデア:

2 つの隣接する値の順序が一致しないことが判明した場合、ソート対象の配列を複数回スキャンします。ソート要件と一致している ルールが一致しない場合、2 つの値が交換されます。このように、小さい(大きい)値が後ろから前に徐々に移動します。

//バブルソート

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

2. クイックソート

基本的な考え方:

配列内の要素 (ほとんどの場合最初の要素) をルーラーとして選択すると、配列を 1 回スキャンすると、それよりも小さくなります。ルーラー 要素はルーラーの前に配置され、ルーラーより大きいすべての要素はルーラーの後に配置されます。すべてのシーケンスが同じ順序になるまで、各サブシーケンスがより小さなシーケンスに分割されます。

//クイックソート

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

3. 二分探索

基本的な考え方:

与えられた値 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 開発でより一般的に使用されるアルゴリズムを共有するものです。皆さんのお役に立てれば幸いです。

関連記事:

PHPの一般的なアルゴリズムとデータ構造の例

以上がPHP で一般的に使用されるアルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。