php快速排序和二分查找法,二分查找及快速排序

0fe5d273c502

小朋友

二分查找和快速排序思想上有很大的相似度,就是做一个起始点,开始往左右做动作,也同样是由递归实现,当然也可以不用递归实现。

但是我觉得也不能用php内置特有的函数- -,我找了很多php的快速排序,几乎都用到了 array_merge 函数。

当然使用的 array_merge 函数里的那个快速排序也是快排思想- -。

快速排序

public function quickSort($left,$right,&$arr)

{

$l= $left;

$r= $right;

$pivot= $arr[($left + $right)/ 2];

$temp= 0;

while ($l< $r) {

while ($arr[$l]< $pivot) {

$l++;

}

while ($arr[$r]> $pivot) {

$r--;

}

if ($l>= $r) {

break;

}

$temp= $arr[$l];

$arr[$l]= $arr[$r];

$arr[$r]= $temp;

if ($arr[$l]== $pivot) {

--$r;

}

if ($arr[$r]== $pivot) {

++$l;

}

}

if ($l== $r) {

$l++;

$r--;

}

if ($left < $r) {

self::quickSort($left, $r,$arr);

}

if ($right > $l) {

self::quickSort($l,$right,$arr);

}

}

二分查找

摸索二分查找法,对于php数组而言,要找一个值太容易了,array_search 一下就好了。

二分查找又叫做折半查找。假设我在纸上写了一个整数,在零到一百之间,需要你来猜我纸上写的到底是几,这个怎么猜?最快速的办法就是做二分查找,假设纸上的数字为10,已知范围为0到100,先将范围值折半,猜50,再询问50是比纸上的数字大还是小,答案是小了,再将范围值缩小至0-50,再次折半,猜25。。。这样才是最快的方式。

用代码实现二分查找法,基本有两个方式,一个是递归,一个是 while 循环。

我选择用递归,递归的方式更直白和简单,更符合以上所说逻辑,好理解。

binarySearch 函数 $array为数组,$k为要找的值,$low 为查找范围的最小键值,$high 为查找范围的最大键值

public function binarySearch($array, $k, $low = 0, $high = 0){

//判断数组元素的数量

if (count($array) != 0 and $high == 0) {

//判断是否为第一次调用

$high = count($array);

}

if ($low <= $high) {//如果还存在剩余的数组元素

$mid = intval(($low + $high) / 2);//取$low 与$high的中间值3

return $array[$mid];

if ($array[$mid] == $k) {

return $mid; //如果找到则返回

} elseif ($array[$mid] > $k) {//如果要找的值小于中间值

//如果上面没有找到,则继续查找

return self::binarySearch($array, $k, $low, $mid - 1);

} else {

return self::binarySearch($array, $k, $mid + 1, $high);//5-11,8-11,9-11,10-11,10+11/2再取整还是10,开始死循环---

}

}

return "没有要查找的值";

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 三目格式,PHP-您使用哪种编码风格的三元运算符?

PHP-您使用哪种编码风格的三元运算符&#xff1f;如果很短&#xff0c;我将其放在一行中。 最近&#xff0c;我一直在将这种样式用于较长或嵌套的三元运算符表达式。 一个人为的例子&#xff1a;$value ( $a $b )? true value # 1: ( $a $c )? true value # 2: false valu…

extractCSS – 帮助你从 HTML 中快速分离出 CSS

extractCSS 是一个免费的基于 Web 的应用程序&#xff0c;能够从 HTML 中提取风格相关的信息&#xff0c;包括 id、class 和内联样式&#xff0c;而且输出可以定制&#xff08;缩进和括号的用法&#xff09;。该工具非常有用&#xff0c;当我们快速创建一个使用了内联样式的 HT…

php项目安装器,php项目安装器程序源码,php通用安装程序

php项目安装器程序源码,php通用安装程序一个安装器的源码&#xff0c;最简单的看一下emlog 也可以&#xff01;文件目录结构index.php 程序首页│ ├─conf 安装后配置文件目录├─data    目录写入测试目录└─install 安装程序目录 │ index.php   安装程…

7zip File: How to Uncompress 7z files on Ubuntu, Debian, Fedora

转&#xff1a;http://www.thegeekstuff.com/2010/04/7z-7zip-7za-file-compression/ Question: How do I uncompress a *.7z file ( 7zip file ) in UNIX / Linux ? Can you explain with a simple example? Answer: Use 7za command to unzip a 7z file ( 7zip file ) on U…

php找不到邮件类,SMTP无法使用php邮件程序类

我有两个帐户&#xff1a;no-replyweddinggrabs.comno-replyappovio.com和传入POP3&#xff1a;pop.secureserver.net(995)传出SMTP&#xff1a;smtpout.secureserver.net(80,3535,25,465)这些工作使用电子邮件客户端,如Thunderbird,post-box等,但不使用php-mailer&#xff1a;…

Python开发环境Wing IDE 5.0测试第八版发布

Wing IDE是著名的Python开发工具&#xff0c;是Wingware公司的主要产品。从1999年起&#xff0c;Wingware公司便开始专注于Python开发设计。Wing IDE在十几年的发展中&#xff0c;不管完善。其强大设计理念包括&#xff1a;编辑工具丰富&#xff0c;编译测试版权一体化&#xf…

PHP5比PHP4,php4和php5的配置异同比较

技术文章配置php4或者php5的过程中&#xff0c;php4&#xff0c;5的配置的步骤大致一样的&#xff0c;但是配置内容有一些差别。在LINUX等环境下编译&#xff0c;一般来说&#xff0c;只要编译的选项正确&#xff0c;配置也就正确了&#xff1b;在windows配置则需要注意以下不同…

matlab文件序号超出511,求教一段matlab的代码 - 数学 - 小木虫 - 学术 科研 互动社区...

不知楼主说的没法求出优化值&#xff0c;是什么意思。是报错还是怎么。我也是刚接触优化&#xff0c;觉得楼主的错误可能是在&#xff1a;主函数里 A[-1;1];的括号中间应该用逗号&#xff0c;而不是分号。即改为A[-1,1];我对你的程序做了一点改动&#xff0c;如下&#xff1a;f…

系统地学习JavaScript

入门 学会DIVCSS布局使用DIVCSS布局标准网页&#xff0c;可以使前端XHTML代码更少、结构更清晰&#xff0c;这有利于轻松用JavaScript操作DOM&#xff0c;比如&#xff0c;要展示一个3 行3列的列表&#xff0c;如果用传统的表格布局&#xff0c;现在要你用JavaScript动态生成这…

matlab this指针,C++ this指针(直戳本质)

为了能让大家看清 this 指针的本质&#xff0c;我们会先讲一点 C 的历史——C 程序到C程序的翻译过程。C 程序到C程序的翻译C 是在C语言的基础上发展而来的&#xff0c;第一个 C 的编译器实际上是将 C 程序翻译成C语言程序&#xff0c;然后再用C语言编译器进行编译。C语言没有类…

WPF自定义控件 —— 装饰器

摘自&#xff1a;http://www.cnblogs.com/Curry/archive/2009/09/16/1567757.html 顾名思义就是装饰用的&#xff0c;也就是说不改变原有的控件结构&#xff0c;但可以为控件添加一些新的功能&#xff0c;或是为控件的显示外观增加些东西。如MSDN中的例子&#xff1a; 本来Text…

matlab填充点面,求大神指点绘制空间内散点图的包络面,,,散点程序如下

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼E[];a0;b0;c0;for Zp-50:2:50for Xp-200:2:200for Yp-200:2:200P1_1[cos(b)*cos(c) -cos(b)*sin(c) sin(b) Xp;sin(a)*sin(b)*cos(c)cos(a)*sin(c) cos(a)*cos(c)-sin(a)*sin(b)*sin(c) -sin(a)*cos(b) Yp;sin(a)*sin(c)-cos(a)*si…

对微软Microsoft Dynamics CRM 的认识

MS CRM的认识 技术层面&#xff1a; MS CRM使用了当前最为流行的Web Service作为数据交互的手段&#xff0c;这给我们的二次开发和系统级的集成带来了无可比拟的方便性、易用性。我们不用关心如何去访问CRM数据库&#xff0c;只需要关心我们要访问CRM中的哪一个对象&#xff0c…

yii+php+当前目录,Yii常用路径方法总结

Yii框架中的一些常见的路径方法的使用方法总结。在控制器添加CSS文件或JavaScript文件&#xff1a;Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl./css/my.css);Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl./css/m…

Java递归函数

原文&#xff1a;http://blog.163.com/zhuliqing_001/blog/static/293340982010101046597/ 1 、递归函数的定义&#xff1a; 答&#xff1a;递归函数即自调用函数&#xff0c;在函数体内直接或间接的调用自己&#xff0c;即函数的嵌套是函数本身。 2 、递归方式&#xff1a;递归…

php的ddd,在MVC框架中实现DDD – PHP

在mvc中,模型是一个层,它包含所有的域业务逻辑.在域驱动设计中,业务逻辑可以分为各种构建块.在域驱动设计域模型中.A domain model is a system of abstractions that describes selectedaspects of a sphere of knowledge,influence or activity (a domain).The model can the…

Netty Associated -- ByteBuf

ByteBuf ByteBuf是Netty的Server与Client之间通信的数据传输载体.他提供了一个byte数组(byte[])的抽象视图 buffer创建 我们推荐通过一个Unpooled的帮助方法来创建新的buffer而不是通过调用独立的构造器来创建 随机访问索引 就像普通的原声字节数组一样, ByteBuf使用零基坐标(z…

php 根号2计算过程,根号2以及π的计算--关于无理数的畅想

[导读]这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。这两篇文章里&#xff0c;我发现不需要那些老师教的范式也能很好地理解那些现代概念&#xff0c;并且理解的更深刻。我一般假设自己从来没有学过微积分&a…

oracle对象权限 函数,oracle的系统和对象权限

alter any cluster 修改任意簇的权限alter any index 修改任意索引的权限alter any role 修改任意角色的权限alter any sequence 修改任意序列的权限alter any snapshot 修改任意快照的权限alter any table 修改任意表的权限alter any trigger 修改任意触发器的权限alter clust…

批处理程序实例

一、交互界面设计 没啥说的&#xff0c;看看高手设计的菜单界面吧&#xff1a;echo offclstitle 终极多功能修复:menuclscolor 0Aecho.echo echo 请选择要进行的操作&#xff0c;然后按回车echo echo.echo 1.网络修复及上网相关设置,修复IE,自定义屏蔽网站echo.echo 2.病毒专杀…