C语言在一个递增有序的线性表中利用二分查找法查找数据元素X
时间: 2023-07-19 13:43:39 浏览: 87
在一个递增有序的线性表中利用二分查找法查找数据元素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。
函数使用了二分查找法的思想,每次将数组分成左半部分和右半部分,然后将目标元素与中间元素进行比较,如果相同则返回中间元素的下标,否则根据目标元素与中间元素的大小关系确定下一步查找的方向。如果目标元素比中间元素大,则在右半部分继续查找;否则在左半部分继续查找。不断重复这个过程,直到找到目标元素或者确定目标元素不存在。
相关问题
完整代码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语言给出在一个递增有序表A中采用二分查找算法查找值为x的元素的递归算法的程序
以下是C语言的递归实现二分查找算法的程序:
```c
int binarySearch(int arr[], int low, int high, int x) {
if (high >= low) {
int mid = low + (high - low) / 2;
if (arr[mid] == x) {
return mid;
}
if (arr[mid] > x) {
return binarySearch(arr, low, mid - 1, x);
}
return binarySearch(arr, mid + 1, high, x);
}
return -1;
}
```
其中,`arr`为有序数组,`low`和`high`分别表示数组的最低和最高下标,`x`为待查找的元素值。程序首先判断`high`是否大于等于`low`,如果是,则计算出中间位置的下标`mid`,然后判断中间位置的元素是否等于`x`,如果是,则返回`mid`。如果中间位置的元素大于`x`,则在数组的左半部分继续查找;否则,在数组的右半部分继续查找。如果`high`小于`low`,则表示查找失败,返回-1。