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,一经查实,立即删除!

相关文章

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   安装程…

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

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

WPF自定义控件 —— 装饰器

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

Netty Associated -- ByteBuf

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

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

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

任务分配与时间估计

各成员的任务分配与时间估计如下&#xff1a; 项目所需总时间为&#xff1a; 转载于:https://www.cnblogs.com/buaa-smile/p/3383374.html

linux所有用户无法登录用户名和密码错误,为什么linux登录不了啊,用户名和密码都没问题,就是出现这个,有高手指点一下。...

为什么linux登录不了啊&#xff0c;用户名和密码都没问题&#xff0c;就是出现这个&#xff0c;有高手指点一下。关注:121 答案:6 mip版解决时间 2021-02-04 23:27提问者删除记忆里的你2021-02-04 04:27最佳答案二级知识专家那年夏天2021-02-04 05:19用户名肯定是root&#x…

linux spring mvc tomcat配置,Spring MVC配置详解

一、Spring MVC处理流程1.Spring MVC将所有请求都交由DispatchServlet进行处理。2.DispatchServlet获取HandlerMapping(处理映射器)&#xff0c;然后找到对应的HandlerBean处理Controller请求&#xff0c;并返回一个ModelAndView对象。3.DispatchServlet查询一个或多个ViewReso…

如何在linux里面运行ncl,NCL基础讲解(二)——NCL安装与运行

NCL基础讲解(二)——NCL安装与运行兰溪之水2015-11-04上一期已经给大家简单介绍了NCL的基本情况&#xff0c;既然NCL在科学数据分析和可视化方面有那么多优点&#xff0c;那还等什么&#xff0c;让我们一起“用”起来吧&#xff01;这一期给大家介绍NCL的安装与运行。关于NCL的…

C#值类型和引用类型的不同

1 C#中有两种类型&#xff1a; 值类型和引用类型&#xff1a; 值类型的变量直接包含他们的数据&#xff0c;引用类型存储对他们的数据的引用&#xff0c;后者称为对象&#xff1a; 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象。2…

linux malloc命令,减少 curl 中内存分配操作(malloc)

今天我在 libcurl 内部又做了一个小改动&#xff0c;使其做更少的 malloc。这一次&#xff0c;泛型链表函数被转换成更少的 malloc (这才是链表函数应有的方式&#xff0c;真的)。研究 malloc几周前我开始研究内存分配。这很容易&#xff0c;因为多年前我们 curl 中就已经有内存…

flume linux 命令,flume启动命令 · Mr.Deng’s Blog

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;突然发现拖了很久的flume启动命令了&#xff0c;今天就简单讲讲flume的启动命令吧。如何启动flumeflume目录以上是安装flume的目录&#xff0c;flume的启动主要是在…

stm32 IAP + APP ==双剑合一

&#xff08;扩展-IAP主要用于产品出厂后应用程序的更新作用&#xff0c;上一篇博文详细的对IAP 升级程序做了详细的分析http://blog.csdn.net/yx_l128125/article/details/12992773&#xff0c;考虑到出厂时要先烧写IAP 再烧写APP应用程序要烧写2次增加工人劳动力基础上写了“…

花旗linux 内核 如何调试,揭秘首个运行在Linux平台的核心银行系统

上个星期社区进行了一场直播&#xff0c;关于“新一代核心银行系统解决方案CBOD”——首个运行在Linux平台的核心银行系统。国外上线Linux核心系统的银行已经不少&#xff0c;例如花旗银行在主机系统上装载了Linux系统&#xff0c;处理所有信用卡交易和认证交易&#xff0c;但国…

360发布穿戴设备“儿童卫士”手环

10月29日下午消息&#xff0c;360今日召开发布会发布“儿童卫士”手环&#xff0c;可随时定位孩子位置&#xff0c;并具备安全区域预警、通话连接等功能。这款手环售价199元&#xff0c;将于12月开始销售。 据360透露&#xff0c;儿童卫士具备三大功能&#xff1a; 一、随时定位…