二分法查找的实现 | JavaScript | PHP | Kotlin

二分法高中就学过了,今天复习算法时候又加固一下,我们首先获取最小位于最大位,然后计算中位(取整)

如果带搜索的值 waitValue > array[m] 说明在中位的右侧相反则左侧。

前提条件是:

1.递增的数组

2.整数(方便演示)

 

JavaScript:正常查找

function normalSearch(searchKey,arrayData){
	for (let i = 0; i < arrayData.length; i++) {
		if(arrayData[i] == searchKey){
			return i
		}
	}	
	return -1;
}

JavaScript:二分法查找,这里用了ceil取整数,因为JS会保留小数部分,使用闭包传入参数自执行。

(function(searchKey,arrayData){
	let start = 0,end = arrayData.length-1;

	while(start <= end){
		let mKey = Math.ceil((start + end)/2);
		if(searchKey == arrayData[mKey]){
			console.log(mKey);
			return mKey;
		}else if(searchKey > arrayData[mKey]){
			start = mKey + 1;
		}else{
			end = mKey-1;
		}

	}
	console.log(-1);
	return ;
})(3,[1,2,3,4,5,6])

PHP二分法查找 

function binarySearch($arr,$value){

	$left = 0;
	$count = count($arr);
	$right = $count - 1;
	
	
	while ($left <= $right) {
		$m =intval(($left + $right)/2);
		if($value == $arr[$m]){
			return $m;
		}
		if($arr[$m] < $value  ){
			$left = $m + 1;
		}else{
			$right = $m-1;
		}
		

	}
	return -1;
	
}
echo binarySearch([1,2,3,4,5],2);

 

Kotlin 二分法查询 

fun main(){

        fun binarySearch(arr:IntArray,value:Int):Int{
            var left = 0
            var right = arr.size - 1
            while (left <= right){
                val m = (left + right)/2
                when{
                    value == arr[m] ->{
                        println("找到:$m")
                        return m
                    }
                    value > arr[m] ->{
                        left = m + 1
                    }
                    else ->{
                        right = m - 1
                    }

                }
            }
            println("没有")
            return 1
        }
        binarySearch(intArrayOf(1,2,3,4,5),3)


}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值