二分法查找,也称折半查找,是一种在有序数组中查找特定元素的搜索算法。查找过程可以分为以下步骤: (1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。 (2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。 (3)如果某一步数组为空,则表示找不到目标元素。 7) 封装binary_search(arr, key),使用非递归算法,实现二分查找,返回目标元素的索引值 8) 封装binary_search(arr,low, high, key),使用递归算法,实现二分查找,返回目标元素的索引值
时间: 2024-03-13 11:48:22 浏览: 10
好的,下面是实现二分查找的代码:
1. 非递归算法:
```javascript
function binary_search(arr, key) {
let low = 0;
let high = arr.length - 1;
while (low <= high) {
const mid = Math.floor((low + high) / 2);
if (arr[mid] === key) {
return mid;
} else if (arr[mid] < key) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(binary_search(arr, 5)); // 4
console.log(binary_search(arr, 10)); // -1
```
2. 递归算法:
```javascript
function binary_search(arr, low, high, key) {
if (low > high) {
return -1;
}
const mid = Math.floor((low + high) / 2);
if (arr[mid] === key) {
return mid;
} else if (arr[mid] < key) {
return binary_search(arr, mid + 1, high, key);
} else {
return binary_search(arr, low, mid - 1, key);
}
}
const arr = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(binary_search(arr, 0, arr.length - 1, 5)); // 4
console.log(binary_search(arr, 0, arr.length - 1, 10)); // -1
```
需要注意的是,二分查找只适用于有序数组,并且在数组中查找特定元素的时间复杂度为 O(logn),效率非常高。