当前位置: 面试刷题>> 二分查找(经典算法150题)
### 题目描述补充
**题目:二分查找算法实现**
给定一个已按照升序排列的有序数组(`arr`)和一个目标值(`target`),请编写一个函数来实现二分查找算法。二分查找算法的基本思想是:在有序数组中,通过不断将数组分成两半,判断目标值可能存在的区间,从而逐步缩小查找范围,直到找到目标值或确定目标值不存在于数组中。
### 示例
假设数组 `arr = [1, 3, 5, 7, 9, 11]`,目标值 `target = 7`,函数应该返回目标值在数组中的索引 `3`。
如果目标值不存在于数组中,则返回 `-1`。
### PHP 代码示例
```php
function binarySearch($arr, $target) {
$left = 0;
$right = count($arr) - 1;
while ($left <= $right) {
$mid = $left + floor(($right - $left) / 2);
if ($arr[$mid] == $target) {
return $mid;
} elseif ($arr[$mid] < $target) {
$left = $mid + 1;
} else {
$right = $mid - 1;
}
}
return -1;
}
// 示例
$arr = [1, 3, 5, 7, 9, 11];
$target = 7;
echo binarySearch($arr, $target); // 输出: 3
```
### Python 代码示例
```python
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 示例
arr = [1, 3, 5, 7, 9, 11]
target = 7
print(binary_search(arr, target)) # 输出: 3
```
### JavaScript 代码示例
```javascript
function binarySearch(arr, target) {
let left = 0;
let right = arr.length - 1;
while (left <= right) {
const mid = Math.floor((left + right) / 2);
if (arr[mid] === target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
// 示例
const arr = [1, 3, 5, 7, 9, 11];
const target = 7;
console.log(binarySearch(arr, target)); // 输出: 3
```
在以上示例中,我们展示了如何在 PHP、Python 和 JavaScript 中实现二分查找算法。这些示例都遵循了二分查找算法的核心逻辑,并通过不断缩小查找范围来寻找目标值。如果目标值存在于数组中,则返回其索引;如果不存在,则返回 `-1`。