二分查找算法的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实现方法的主要内容,如果未能解决你的问题,请参考以下文章