仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1263|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网站制作之利用PHP完成二分查找算法代码分享

[复制链接]
莫相离 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:37:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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对字母的大小写是敏感的,写的时候一定要注意大小写的区别。
再见西城 该用户已被删除
21#
发表于 2015-4-21 18:13:27 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
变相怪杰 该用户已被删除
20#
发表于 2015-4-16 21:12:03 | 只看该作者
当然这种网站的会员费就几十块钱。
蒙在股里 该用户已被删除
19#
发表于 2015-4-8 20:44:51 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
18#
发表于 2015-4-7 21:16:17 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
不帅 该用户已被删除
17#
发表于 2015-4-1 19:11:09 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
飘灵儿 该用户已被删除
16#
发表于 2015-3-27 07:10:19 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
若天明 该用户已被删除
15#
发表于 2015-3-25 22:41:17 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
老尸 该用户已被删除
14#
发表于 2015-3-18 14:15:42 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
海妖 该用户已被删除
13#
发表于 2015-3-16 00:58:20 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
小妖女 该用户已被删除
12#
发表于 2015-3-14 12:55:11 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
分手快乐 该用户已被删除
11#
发表于 2015-3-13 10:07:34 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
再现理想 该用户已被删除
10#
发表于 2015-3-12 14:52:46 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
愤怒的大鸟 该用户已被删除
9#
发表于 2015-3-11 13:17:26 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
透明 该用户已被删除
8#
发表于 2015-3-3 21:01:52 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
小魔女 该用户已被删除
7#
发表于 2015-2-26 04:26:06 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-22 13:53:10 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
山那边是海 该用户已被删除
5#
发表于 2015-2-18 23:44:19 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
因胸联盟 该用户已被删除
地板
发表于 2015-2-8 20:04:00 | 只看该作者
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
冷月葬花魂 该用户已被删除
板凳
发表于 2015-2-7 23:14:58 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-1 11:29

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表