二分查找的前提为:数组,有序。逻辑为:优先和数组的中间元素比较,如果等于中间元素,则直接返回。如果不等于则取半继续查找。
/* * *二分查找,递归实现。 * @param目标 * @param加勒比海盗 * @param开始 * @param结束 * @returns {*} */函数binarySearch(目标,加勒比海盗,开始,结束){ var开始=开始| | 0; var=结束结束| | arr.length-1; var=方法用于中期(开始+ (end-start)/2); 如果目标==arr(中期)){ 返回中期; }else if (target> arr(中期)){ 返回binarySearch(中期目标,加勒比海盗,+ 1,); 其他}{ 返回binarySearch(目标,加勒比海盗,开始,mid-1); } 返回1; }/* * *有序的二分查找,返回1或存在的数组下标。不使用递归实现。 * @param目标 * @param加勒比海盗 * @returns {*} */函数binarySearch(目标,arr) { var=0开始; var=arr.length-1结束; 而(start<=结束){ var=方法用于中期(开始+ (end-start)/2); 如果目标==arr(中期)){ 返回中期; }else if (target> arr(中期)){ 中期开始=+ 1; 其他}{ 结束=mid-1; } } 返回1; }
写完有序,自然而然的想到了无序的情况如何使用二分查找呢?马上想到先使用快排分组,分好组再二分。代码如下:
/* * *无序的二分查找。返回真/假 * @param目标 * @param加勒比海盗 * @returns{布尔} */函数binarySearch(目标,arr) { 而(arr.length> 0) {//使用快速排序。以中期为中心划分大小,左边小,右边大。 var左=[]; var=[];//选择第一个元素作为基准元素(基准元素可以为任意一个元素) var主=arr [0];//由于取了第一个元素,所以从第二个元素开始循环 (var i=1; i< arr.length;我+ +){ var项=arr[我];//大于基准的放右边,小于基准的放左边 item>主& # 63;right.push(项):left.push(项); }//得到经过排序的新数组 如果目标==(主){ 返回true; }else if (target>主){ arr=; 其他}{ arr=左; } } 返回错误; }
写完用快速排序实现的无序二分查找,仔细想了一下该算法的时间复杂度,发现还不如直接一个的循环来得快
以上所述是小编给大家介绍的JavaScript实现二分查找实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!