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 -;
int mid = (low + high) / ;
if(key < arr[mid]) return Bisection(key, arr, low, mid - );
else if(key == arr[mid]) return mid;
else return Bisection(key, arr, mid + , high);
} // 写算法之前最好先写好测试用例
int main() {
int n, key, position;
cin>>n;
int *arr;
arr = (int*)calloc(n, sizeof(int));
for(int i = ; i < n; i++) {
cin>>arr[i];
}
   // 对数组进行排序
   sort(arr, arr + n);
cin>>key;
if((position = Bisection(key, arr, , n - )) != -) {
cout<<"关键字位置:"<<position<<endl;
}else {
cout<<"未找到关键字!"<<endl;
}
// 在使用动态数组时,最后要记得释放这些内存
free(arr);
return ;
}

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实现的更多相关文章

  1. Java实现的二分查找算法

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...

  2. c#-二分查找-算法

    折半搜索,也称二分查找算法.二分搜索,是一种在有序数组中查找某一特定元素的搜索算法. A 搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: B 如果某一特定元素大于或者小 ...

  3. 二分查找算法(JAVA)

    1.二分查找又称折半查找,它是一种效率较高的查找方法. 2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位 ...

  4. 二分查找算法java实现

    今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. 二分查找算法也称为折半搜索 ...

  5. Java学习之二分查找算法

    好久没写算法了.只记得递归方法..结果测试下爆栈了. 思路就是取范围的中间点,判断是不是要找的值,是就输出,不是就与范围的两个临界值比较大小,不断更新临界值直到找到为止,给定的集合一定是有序的. 自己 ...

  6. python函数(4):递归函数及二分查找算法

    人理解循环,神理解递归!  一.递归的定义 def story(): s = """ 从前有个山,山里有座庙,庙里老和尚讲故事, 讲的什么呢? ""& ...

  7. python实现二分查找算法

    二分查找算法也成为折半算法,对数搜索算法,一会中在有序数组中查找特定一个元素的搜索算法.搜索过程是从数组中间元素开始的 如果中间元素正好是要查找的元素,则搜索过程结束:如果查找的数大于中间数,则在数组 ...

  8. 剑指Offer——二分查找算法

    剑指Offer--二分查找算法 前言 本片博文主要讲解查找算法的相关知识.重点介绍二分查找. 二分查找算法是在有序数组中用到的较为频繁的一种查找算法,在未接触二分查找算法时,最通用的一种做法是,对数组 ...

  9. C++二分查找算法演示源码

    如下内容段是关于C++二分查找算法演示的内容. #include <cstdio>{ int l = 0, r = n-1; int mid; while (l <= r){ mid ...

  10. Java之二分查找算法

    算法说明:取中间位置的值与待查字比较.如果比待查字更大,则去列表的前半部分查找,如果比待查字小,则去列表的后半部分查找,直到找到这个待查字,或者返回没有找到这个待查字.其中给定的列表是从大到小排列的有 ...

随机推荐

  1. AngularJS进阶(四十)创建模块、服务

    AngularJS进阶(四十)创建模块.服务 学习要点 使用模块构架应用 创建和使用服务 为什么要使用和创建服务与模块? 服务允许你打包可重用的功能,使之能在此应用中使用. 模块允许你打包可重用的功能 ...

  2. HTTP 消息结构

    HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议. 一个HTTP"客户端"是一个应用程序(Web浏览 ...

  3. 【翻译】将Ext JS Grid转换为Excel表格

    原文:Converting an Ext 5 Grid to Excel Spreadsheet 稍微迟来的礼物--Ext JS Grid转为Excel代码,现在支持Ext JS 5! 功能包括: - ...

  4. PA 项目创建任务

    ---- 创建任务 DECLARE p_project_id NUMBER := 155233; p_task_number VARCHAR2(240) := 'CXYTEST0001'; p_tas ...

  5. oracle中去重复记录 不用distinct

    用distinct关键字只能过滤查询字段中所有记录相同的(记录集相同),而如果要指定一个字段却没有效果,另外distinct关键字会排序,效率很低 . select distinct name fro ...

  6. XBMC源代码简析 5:视频播放器(dvdplayer)-解复用器(以ffmpeg为例)

    XBMC分析系列文章: XBMC源代码分析 1:整体结构以及编译方法 XBMC源代码分析 2:Addons(皮肤Skin) XBMC源代码分析 3:核心部分(core)-综述 XBMC源代码分析 4: ...

  7. 阿里云服务器实战(二): Linux MySql5.6数据库乱码问题

    在阿里云上了买了一个云服务器, 部署了一个程序,发现插入数据库后乱码了,都成了'????'.  一开始怀疑是Tomcat7的原因 , 见文章 : http://blog.csdn.net/johnny ...

  8. linux shell (()) 双括号运算符使用

    估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...

  9. Android安全机制浅谈-android学习之旅(80)

    由于Android安全机制存在,使得漏洞利用有一些困难. ASLR:即地址空间格局随机化.ASLR使得加载程序时不使用固定的基址加载,防止攻击者直接定位攻击代码位置,从而阻止溢出攻击 NX:(No e ...

  10. MFC中使用SDL播放音频没有声音的解决方法

    本文所说的音频是指的纯音频,不包含视频的那种. 在控制台中使用SDL播放音频,一般情况下不会有问题. 但是在MFC中使用SDL播放音频的时候,会出现没有声音的情况.经过长时间探索,没有找到特别好的解决 ...