二分查找的算法,用low和high来表示当前查找区间的下界和上界,mid为中间位置
时间: 2024-03-08 18:46:03 浏览: 84
二分查找算法的基本思想是将查找区间不断缩小,直到找到目标元素或区间为空。其具体步骤如下:
1. 初始化 low 和 high 分别为查找区间的下界和上界。
2. 计算区间的中间位置 mid。
3. 如果目标元素等于 mid 处的元素,则直接返回 mid。
4. 如果目标元素小于 mid 处的元素,则在 low 到 mid-1 的区间中继续查找。
5. 如果目标元素大于 mid 处的元素,则在 mid+1 到 high 的区间中继续查找。
6. 循环执行步骤 2 到 5,直到找到目标元素或者区间为空。
下面是一个示例代码实现:
```python
def binary_search(nums, target):
low, high = 0, len(nums) - 1
while low <= high:
mid = (low + high) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
```
其中 nums 是一个已经排序的数组,target 是要查找的目标元素。如果找到目标元素,则返回其索引;否则返回 -1。
相关问题
试写出二分查找的算法,用low和high来表示当前查找区间的上界和下界,mid为中间位置
好的,以下是二分查找算法的示例代码(使用C语言):
```c
int binary_search(int arr[], int n, int target) {
int low = 0, high = n-1;
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
```
其中,arr为待查找的有序数组,n为数组的长度,target为需要查找的目标值。在二分查找中,我们通过将查找区间不断缩小一半,来逐步逼近目标值。
在代码中,我们使用low和high来表示当前查找区间的上界和下界,初始时low为0,high为n-1。在每一轮查找中,我们通过计算mid来找到当前查找区间的中间位置。如果arr[mid]等于target,则直接返回mid;如果arr[mid]小于target,则说明目标值在mid的右侧,因此需要将查找区间缩小到mid+1到high;如果arr[mid]大于target,则说明目标值在mid的左侧,因此需要将查找区间缩小到low到mid-1。最终,如果没有找到目标值,则返回-1。
希望这个示例代码能够帮到你,如果你还有其他问题,请继续提出。
写出折半查找(二分法查找)的递归算法。其中,有序表为ST,要查找的关键字为key,low表示当前查找序列的下界,high表示当前查找序列的上界。
好的,以下是折半查找的递归算法:
```
int BinarySearch(int ST[], int key, int low, int high) {
if (low > high) { // 如果下界大于上界,说明没找到
return -1;
}
int mid = (low + high) / 2; // 计算中间位置
if (key == ST[mid]) { // 如果中间位置正好是关键字,直接返回
return mid;
} else if (key < ST[mid]) { // 如果关键字小于中间位置的值,说明在左半边
return BinarySearch(ST, key, low, mid - 1);
} else { // 如果关键字大于中间位置的值,说明在右半边
return BinarySearch(ST, key, mid + 1, high);
}
}
```
函数返回值为查找到的关键字在有序表中的下标,如果没找到则返回-1。
阅读全文