二分查找的运行时间为对数时间 logn,而简单查找时间为 n
思路:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
// 非递归算法 while 循环
function binary_search(arr, key) { let low = 0; let high = arr.length - 1; while(low <= high){ let mid = parseInt((high + low) / 2); if(key === arr[mid]){ return mid; }else if(key > arr[mid]){ low = mid + 1; }else if(key < arr[mid]){ high = mid -1; }else{ return -1; } } }
// 递归算法 循环调用函数本身
function binary_search(arr,low, high, key) { if (low > high){ return -1; } let mid = parseInt((high + low) / 2); if(arr[mid] === key){ return mid; }else if (arr[mid] > key){ high = mid - 1; return binary_search(arr, low, high, key); }else if (arr[mid] < key){ low = mid + 1; return binary_search(arr, low, high, key); } };