PHPハーフ(二分)検索アルゴリズム例分析

不言
リリース: 2023-03-29 06:36:02
オリジナル
1238 人が閲覧しました

この記事では、主に PHP ハーフ (二分) 検索アルゴリズムを紹介し、PHP ハーフ (二分) 検索アルゴリズムの概念、原理、実装、使用法を詳細に分析します。また、PHP ハーフ (二分) 検索アルゴリズムも付属しています。 ) 検索アルゴリズムのカテゴリは参考用です。必要な方は参考にしてください。この記事では、PHP の半分 (二分) 検索アルゴリズムを例に説明します。参考までに皆さんと共有してください。詳細は次のとおりです。

Half クエリは、正または逆の順序でソートされた配列、文字列などにのみ適用されます。

アルゴリズム:

最初に中央を取得します。配列の位置、中央の位置がない場合は切り捨てます。

真ん中から半分に折り、サイズを判断して、前半または後半を入力します

次に、最初の半分のクエリを実行します。半分または後半、

一致する文字が見つかるまで停止しないでください (この例ではbreakを使用していますが、関数に配置されている場合はreturnするだけです)

phpで実装されたコードは次のとおりです:

<?php
$arr = array(1,2,3,4,5,6,7,8,9,10);//数组
$key = 4;//要查询的关键字
$low = 0;//开始位的标志
$high = count($arr);//终止位的标志
while($low <= $high){//查询开始结束的条件
 $mid = floor(($low + $high)/2);//进行中间位置计算,向下取整
 if($arr[$mid] == $key){//查询成功
 echo $arr[$mid];
 break;//结束本页执行,函数可用return
 }elseif($arr[$mid] > $key){ //查询前半段,把结束标志移到中间位置前一位
 $high = $mid - 1;
 }else{ //查询后半段,把开始位置移到中间位置的后一位
 $low = $mid + 1;
 }
}
/*
运行结果:4
*/
?>
ログイン後にコピー

追加: 2 分割 (二分) 検索アルゴリズム クラス:

/**
 * Description:php实现二分查找算法的类
 * @author wzy
 */
class binary_search{
  public $arr;
  public $key;
  function __construct($arr,$key){
    //这里初始化的数组已经是有序数组
    $this->arr=$arr;
    $this->key=$key;
  }
  function binarysearch(){
    $start=0;
    $end=count($this->arr)-1;
    while($start<=$end){
      //mid的取值可以为上整数或者下整数
      $mid=ceil(($start+$end)/2);
      //$mid=($start+$end)>>1;
      //$mid=intval(($start+$end)/2);
      if($this->arr[$mid]<$this->key){
        $start=$mid+1;
      }else if($this->arr[$mid]>$this->key){
        $end=$mid-1;
      }else{
        return $mid;
      }
    }
  }
}
ログイン後にコピー

この状況が発生する場合もあります。返される必要があるのは位置です。たとえば、

$arr=array(1,2,3,4,5,6,6,6,6,7,8);
ログイン後にコピー

が要素6を検索する場合、返される位置はそれ以外ではなく5である必要があるため、判断する必要があります。返されたミッドのコードは次のとおりです。

以上がPHPハーフ(二分)検索アルゴリズム例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート