js 二分法查找

例子:有序数组查找

//1递归做法

function findArr(arr,value,left,right){

var mid=Math.floor((left+right)/2);

//防止无穷递归

if(left>right){

return

}

if(arr[mid]>value){//左边

return findArr(arr,value,left,mid-1)

}else if(arr[mid]<value){//右边

return findArr(arr,value,mid+1,right)

}else{

return ‘找到了,位置是‘+mid;

}

};

//2 二进制做法

function binary(items,value,startIndex,stopIndex){

var middleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex<stopIndex){

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:middleIndex;

}

var arr=[11,22,33,44,55,66,77,88,99];

alert(findArr(arr,66,0,arr.length-1));

alert(binary(arr,660,arr.length-1));

时间: 2024-09-30 15:02:18

js 二分法查找的相关文章

JS二分法查找数值在数值中的区间

需求:求一个数字类型,在一个数组中的区间: 1 $(function(){ 2 //二分法计算最近的数组下标 3 Array.prototype.binarySearch = function(obj){ 4 //var value = 0; 5 var left = 0; 6 var right = this.length; 7 while(left <= right){ 8 var center = Math.floor((left+right)/2); 9 if(obj<this[cen

二分法查找 --JS 实现

var indexOfSorted = function f(arr,n){ //assume : arr has been sorted var low = 0; var high = arr.length - 1; var mid = (low + high) / 2; while(high - low > 1){ if(n == arr[low]){return low;} if (n == arr[high]){return high;} if(n == arr[mid]){return

java的二分法查找数据

Java二分法查找的源代码:    二分查找是一种高效率线性表的查找算法.在查找时必须将线性表中的关键词排好序.基本思路是:先断定线性表的中心方位 mid=(first+last)/2:对比所要查找的关键词 key与中心方位的关键词的巨细,假如比key和mid.key持平则回来: key比mid.key大(假定为升序)这所要查找的关键词在mid和last之间:否则在first与mid之间.持续按照上面办法查找中心元素,直到找到为止.    详细完成如下package com.cgogo; /**

js 正则表达式 查找

<script>var str='<p><img style="width: 140px; height: 105px;" src="/ckfinder/userfiles/images/qi_cym.jpg" data-cke-saved-src="/ckfinder/userfiles/images/qi_cym.jpg"></p><p><br></p>';

数组排序 和 二分法查找

二分法查找 当数据量很大适宜采用该方法.采用二分法查找时,数据需是有序不重复的. 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于当前位置值,则在数列的前半段中查找:若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止. 假设有一个数组 {5,4,2, 67, 77, 89, 90,4,9,1,12, 23, 34, 45, 56 },现要求采用二分法找出指定的数值并将其在数组的索引返回,如果没有找到则返回 -

JavaScript用二分法查找数据等

//二分法查数据 var arr=[41,43,45,53,44,95,23]; var b=44; var min=0; var max=arr.length; for(var i=1;i<arr.length;i++){ //外层循环控制排序的次数 for(var j=0;j<arr.length-i;j++){//内层循环控制循环的个数 if(arr[j]<arr[j+1]){ z=arr[j]; arr[j]=arr[j+1]; arr[j+1]=z; } } } // aler

python 实现二分法查找

二分查找图 二叉树: 代码 #!/usr/bin/python #-*-coding:utf-8-*- #---------------------------------------------------------------------------------------- # to_do : binary find # authors: zuoxingyu # time : 2014-06-07 #--------------------------------------------

python的算法:二分法查找(1)

1.什么是二分法查找: 1.从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束: 2.如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较. 3.如果在某一步骤数组为空,则代表找不到. 每次都是i减半查找,其时间消耗为O(logn) 最简单的一个循环算法就是: def binary_search_loop(lst,value): low,high=0,len(value)-1 while low<=high: mid=

在数组中使用二分法查找

package com.db2; import java.util.Arrays; /** * 二分法查找 * * @author denny 使用二分法查找的前提数组已经排过序 * */ public class Demo4 { public static void main(String[] args) { int[] arr = { 3, 1, 8, 2, 9, 100, 33, 22, 11, 18, 14, 17, 15, 3 }; // 使用Arrays.sort()排序 Array