|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。 第一种办法:
【二分查找请求】:1.必需采取按次存储布局 2.必需按关头字巨细有序分列。
【优弱点】折半查找法的长处是对照次数少,查找速度快,均匀功能好;其弱点是请求待查表为有序表,且拔出删除坚苦。因而,折半查找办法合用于不常常变化而查找频仍的有序列表。
【算法思惟】起首,将表两头地位纪录的关头字与查找关头字对照,假如二者相等,则查找胜利;不然使用两头地位纪录将表分红前、后两个子表,假如两头地位纪录的关头字大于查找关头字,则进一步查找前一子表,不然进一步查找后一子表。
复制代码 代码以下:
<?php
//作者:悠远的等候
//QQ:15624575
//主页:http://www.phptogether.com/
//正向排序的数组
$arr=array(1,3,5,7,9,11);
//逆向排序的数组
$arr2=array(11,9,7,5,3,1);
//对正向排序的数组停止二分查找
function searchpart($arr,$x){
$start=0;
$end=count($arr)-1;
while($start<=$end){
$mid=intval(($start+$end)/2);//这里只需求包管两头项下标的盘算值为整数便可,也能够四舍五入,不影响了局
if($arr[$mid]>$x){//假如两头项的值大于待查值,申明代差值位于两头项的右边,因而,肇端下标不变,停止下标酿成两头项下标减1,第一次搜刮的是$arr[0]-$arr[5]的话,下一次搜刮
$end=$mid-1;//$arr[0]-$arr[1]
}elseif($arr[$mid]<$x){//假如两头项的值小于待查值,申明代差值位于两头项的右侧,因而,停止下标不变,肇端下标酿成两头项下标加1,第一次搜刮的是$arr[0]-$arr[5]的话,下一//次搜刮是,$arr[3]-$arr[5]
$start=$mid+1;
}else{//找到了,前往待查值下标
return $mid;
}
}
}
//对逆向排序的数组停止二分查找
function searchpart2($arr,$x){
$start=0;
$end=count($arr)-1;
while($start<=$end){
$mid=intval(($start+$end)/2);//这里只需求包管两头项下标的盘算值为整数便可,也能够四舍五入,不影响了局
if($arr[$mid]>$x){//假如两头项的值大于待查值,申明代差值位于两头项的右侧,因而,停止下标不变,肇端下标酿成两头项下标加1,第一次搜刮的是$arr[0]-$arr[5]的话,下一次搜刮
$start=$mid+1;//$arr[3]-$arr[5]
}elseif($arr[$mid]<$x){//假如两头项的值小于待查值,申明代差值位于两头项的右边,因而,肇端下标不变,停止下标酿成两头项下标减1,第一次搜刮的是$arr[0]-$arr[5]的话,下一//次搜刮是,$arr[0]-$arr[1]
$end=$mid-1;
}else{//找到了,前往待查值下标
return $mid;
}
}
}
echo searchpart2($arr,5).'<br>';
echo searchpart2($arr2,5);
?>
PHP的二分查找算法完成
比来收拾整顿了下之前进修的算法常识,固然在WEB开辟时算法用到的情形对照少,但仍是把一些有效的算法做下备份。
折半查找法也称为二分查找法,它充实使用了元素间的次第关系,采取分治战略,可在最坏的情形下用O(log n)完成搜刮义务。
【根基思惟】
将n个元素分红个数大致不异的两半,取a[n/2]与欲查找的x作对照,假如x=a[n/2]则找到x,算法终止。假如x<a[n/2],则咱们只需在数组a的左半部持续搜刮x(这里假定数组元素呈升序分列)。假如x>a[n/2],则咱们只需在数组a的右半部持续搜刮x。
二分搜刮法的使用极为普遍,并且它的思惟易于了解。第一个二分搜刮算法早在1946 年就呈现了,然而第一个完整准确的二分搜刮算法直到1962年才呈现。Bentley在他的著作《Writing Correct Programs》中写道,90%的盘算机专家不克不及在2小时内写出完整准确的二分搜刮算法。成绩的关头在于正确地制订各次查找局限的界限和终止前提切实其实定,准确地归结奇偶数的各类情形,其实收拾整顿后可以发明它的详细算法是很直不雅的。
PHP的二分查找算法完成
复制代码 代码以下:
/**
* 二分查找算法
*
* @param array $arr 有序数组
* @param int $val 查找的数值
* @return int 查找值存在前往数组下标,不存在前往-1
*/
function binary_search($arr,$val)
{
$l = count($arr);//取得有序数组长度
$low = 0;
$high = $l -1;
while($low <= $high)
{
$middle = floor(($low + $high) / 2);
if($arr[$middle] == $val)
{
return $middle;
}
elseif($arr[$middle] > $val)
{
$high = $middle - 1;
}
else
{
$low = $middle + 1;
}
}
return -1;
}
//示例
$arr = array(1,2,3,4,5,6,7,8,9,12,23,33,35,56,67,89,99);
echo binary_search($arr,57);
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。 |
|