php纯原生实现数组二分法

代码如下



$arr = [1,3,5,7,9];//$arr = range(1,10000);var_dump(find($arr, 2));

function find(array $arr, $seach)
	{
		$left  = 0;
		$right = count($arr) - 1;
		if($seach > $arr[$right]) {
			return $arr[0];
		}
		while($left < $right) {
			$mod = (($left + $right +1) >> 1);
			echo $mod,‘<br >‘;
			if($mod == $right) {
				return $arr[$mod];
			}
			if($arr[$mod] < $seach) {
				$left = $mod;
			} else if ($arr[$mod] > $seach) {
				$right = $mod;
			} else {
				return $arr[$mod];
			}
		}
		return false;
	}

  

时间: 2024-10-06 20:31:21

php纯原生实现数组二分法的相关文章

【Android界面实现】使用ActionBar和DrawerLayout纯原生控件,实现侧滑栏和滑动Tab界面

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的文章中,我们使用第三方开源控件,比如说是SlidingMenu和PagerSlidingTabStrip,实现过侧滑栏和滑动Tab界面.但是在support-v4包中,提供了原生的侧滑栏控件DrawerLayout,而滑动的Tab效果,我们可以使用ViewPager和ActionBar上的Tab来进行实现.所以在今天的文章里面,我们将介绍如何将DrawerLayout与ActionBar进行整合,

一个Demo带你认识Design库,纯原生控件也能做出很漂亮的效果

欢迎转载,转载请注明出处http://blog.csdn.net/w804518214/article/details/51340984 不得不说开发者头条的APP真的是Material Design的典范,纯原生控件也能做出很漂亮的效果,并且不需要处理各种复杂的滑动冲突!!其主页基本把Design库的几个控件展示了一遍,今天就顺手借开发者头条主页的实现来简单介绍下官方Design扩展包里几个控件的使用.本文不会详细展开讲每个控件,仅仅针对demo效果的实现,想深入研究的推荐看官方指南! 先上效

纯原生js移动端图片压缩上传插件

前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于jquery.zepto的(这句话似乎吐槽次数太多了...),然后我也就不吐槽了, 然后当然是自己做了,先上图: 纯原生js的移动端图片压缩上传插件,不依赖任何库 用法 在html页面中引入input标签,通过自定义属性data-LUploader绑定点击触发的标签id,写法如下: <div cla

js只需5分钟创建一个跨三大平台纯原生APP

DeviceOne之前介绍过了,现在来介绍一下DeviceOne快速开发到什么程度 使用js只需要5分钟就可以打出垮Android.ios.windows三大平台的纯原生UI的安装包. 只需要6个小时,就可以画出仿微信的四个页面. 只需要10个小时,就可以画出仿墨迹天气的三个页面. DeviceOne地址:http://www.deviceone.net QQ群:365443130 请看效果图:

纯原生组件化-模块化的探索

纯原生的组件化.模块化的一次小小的尝试,用到了如下几个新特性:shadown-DOM 对HTML标签结构的一个封装,真正意义上的组件,能保证 shadow-DOM 中的DOM元素不会被外界影响,内部也不会影响到外部的行为,变成了一个独立的模块.custom-elements 可以在浏览器中注册自定义的标签来使用,类似这样的效果<my-tag></my-tag>,标签内容基于两种形式:1. 普通子元素 2. shadow-DOMcustom-events 使用各种自定义事件辅助完成组

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢?这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原生JS方法类似)可以达到Array.xxx()这样的效果 第一种方法:创建空数组利用indexOf方法检测就数组的项是否在新数组中. Array.prototype.unique=function(){ var arr=[];//创建新数组 for(var i=0;i<this.length;i++)

原生js 数组的迭代的方法

一.原生js Array给我们提供很多了方法.方便我们操作数组.这些方法的参数,都需要传入一个匿名函数,匿名函数中有三个参数,分别含义是:数组中的项.该项的索引.以及数组本身. 1.filter方法:对数组每一项执行匿名函数,并返回符合条件的数组的项. 1 var testArr=[1,2,3,4,52,2]; 2 //filter 方法 3 var moreTwo=testArr.filter(function(item,index,array){ 4 return item >2; 5 })

原生JS数组方法(二)——reverve()、slice()、concat()、sort()

reverve 数组的倒序方法 Array.prototype.reverse = function(){ //用二分法 for(var i=0;i<this.length/2;i++){ //解构赋值 [this[i],this[this.length-1-i]] = [this[this.length-1-i],this[i]] } return this } slice 数组截取,不改变原数组,并把截取的新数组返回出去 Array.prototype.Slice =function(n=0

纯js 添加数组删除

Array.prototype.remove = function (s, dust) { //如果dust为ture,则返回被删除的元素 if (dust) { var dustArr = []; for (var i = 0; i < this.length; i++) { if (s == this[i]) { dustArr.push(this.splice(i, 1)[0]); } } return dustArr; } for (var i = 0; i < this.length