非递归的二分查找(从递增有序数组中查找指定整数 代码
时间: 2024-09-06 10:07:33 浏览: 37
非递归的二分查找是一种高效的查找算法,它适用于在一个有序数组中查找特定的元素。该算法的基本思想是:每次查找都将搜索范围缩小一半,直到找到目标元素或搜索范围为空。
以下是使用Python实现非递归二分查找的示例代码:
```python
def binary_search_non_recursive(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = left + (right - left) // 2 # 防止溢出,等同于 (left + right) // 2
if arr[mid] == target:
return mid # 找到目标,返回索引
elif arr[mid] < target:
left = mid + 1 # 目标在右侧
else:
right = mid - 1 # 目标在左侧
return -1 # 未找到目标,返回-1
```
使用这个函数时,传入一个递增有序的数组`arr`和要查找的目标值`target`,函数会返回目标值在数组中的索引。如果没有找到目标值,则返回`-1`。
相关问题
完整代码C语言在一个递增有序的线性表中利用二分查找法查找数据元素X
以下是完整的 C 语言代码实现,在一个递增有序的线性表中利用二分查找法查找数据元素 X:
```c
#include <stdio.h>
int binary_search(int array[], int len, int target) {
int left = 0, right = len - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (array[mid] == target) {
return mid;
} else if (array[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int len = sizeof(array) / sizeof(int);
int target = 5;
int index = binary_search(array, len, target);
if (index != -1) {
printf("Target found at index %d\n", index);
} else {
printf("Target not found\n");
}
return 0;
}
```
这个程序首先定义了一个递增有序的数组 `array`,数组的长度为 `len`,要查找的元素为 `target`。然后调用 `binary_search()` 函数进行查找,将返回值存储在 `index` 变量中。如果返回值不为 -1,则说明目标元素存在于数组中,打印出目标元素的下标。否则,说明目标元素不存在于数组中,打印出提示信息。
在这个程序中,我们调用了 `sizeof()` 函数来获取数组的长度,这是一种常见的获取数组长度的方法。
C语言在一个递增有序的线性表中利用二分查找法查找数据元素X
在一个递增有序的线性表中利用二分查找法查找数据元素X的C语言代码如下:
```
int binary_search(int array[], int len, int target) {
int left = 0, right = len - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (array[mid] == target) {
return mid;
} else if (array[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
这个函数接收三个参数:一个递增有序的数组 `array`、数组的长度 `len` 和要查找的元素 `target`。函数返回值为找到的元素的下标,如果元素不存在则返回 -1。
函数使用了二分查找法的思想,每次将数组分成左半部分和右半部分,然后将目标元素与中间元素进行比较,如果相同则返回中间元素的下标,否则根据目标元素与中间元素的大小关系确定下一步查找的方向。如果目标元素比中间元素大,则在右半部分继续查找;否则在左半部分继续查找。不断重复这个过程,直到找到目标元素或者确定目标元素不存在。