二分查找算法的C++和PHP实现方法

Posted 涤生wp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找算法的C++和PHP实现方法相关的知识,希望对你有一定的参考价值。

C++实现:

#include<iostream>

#include<stdlib.h>

#include<algorithm>


using namespace std;


int Bisection(int key, int arr[], int low, int high) {

    if(low > high) return -1;

    int mid = (low + high) / 2;

    if(key < arr[mid]) return Bisection(key, arr, low, mid - 1);

    else if(key == arr[mid]) return mid;

    else return Bisection(key, arr, mid + 1, high);

}


// 写算法之前最好先写好测试用例

int main() {

    int n, key, position;

    cin>>n;

    int *arr;

    arr = (int*)calloc(n, sizeof(int));

    for(int i = 0; i < n; i++) {

        cin>>arr[i];

    }

    sort(arr, arr + n);

    cin>>key;

    if((position = Bisection(key, arr, 0, n - 1)) != -1) {

        cout<<"关键字位置:"<<position<<endl;

    }else {

        cout<<"未找到关键字!"<<endl;

    }

    // 在使用动态数组时,最后要记得释放这些内存

    free(arr);

    return 0;

}


php实现:

<?php


/**

 * 实现类

 */

namespace achieve;


class publicMethod

{

    /**

     * @param $key

     * @param $arr

     * @param $low

     * @param $high

     * @return float|int

     * @description 二分查找的实现方法

     */

public function Bisection($key, $arr, $low, $high) {

if ($low > $high) return -1;

$mid = round(($low + $high) / 2);

if ($key < (int)$arr[$mid]) return $this->Bisection($key, $arr, $low, $mid - 1);

else if($key == (int)$arr[$mid]) return $mid;

else return $this->Bisection($key, $arr, $mid + 1, $high);

}

}


/**

 * 测试类

 */

namespace test;

use achieve;


class Test

{

    /**

     * 测试二分查找的用例方法

     */

public function testBisection() {

$pm = new \achieve\publicMethod();

$n = fgets(STDIN);

$arr = explode(" ", trim(fgets(STDIN)));

$key = fgets(STDIN);

        sort($arr, SORT_REGULAR);

if (($position = $pm->Bisection((int)$key, $arr, 0, count($arr) - 1)) != -1) {

fwrite(STDOUT, "关键字位置是:$position");

}else {

fwrite(STDOUT, "未找到关键字!");

}

}

}


$test = new Test();

$test->testBisection();


?>

这段PHP代码需要在命令行下执行,用php filepath.php来执行filepath是该脚本的完整路径加文件名。


在写具体的算法实现之前最好先将测试用例写好。

如果看着不方便请点击阅读原文




以上是关于二分查找算法的C++和PHP实现方法的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现二分查找算法(代码详解)

二分查找(折半算法实现)

查找算法解析学习四大常用的计算机查找算法 | C++

分治算法-二分查找

PHP数组的二分查找算法

PHP 二分查找算法