用C语言写二分搜索算法,数组元素从下标1开始存储
时间: 2023-04-07 17:05:33 浏览: 66
好的,我可以回答这个问题。以下是用C语言写二分搜索算法的代码:
```c
int binary_search(int arr[], int n, int target) {
int left = 1, right = n;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
其中,arr是存储元素的数组,n是数组的长度,target是要查找的元素。函数返回目标元素在数组中的下标,如果不存在则返回-1。
相关问题
c语言数组查找
在C语言中,可以通过遍历数组的方式来查找特定的元素,也可以使用二分查找等高效算法来查找。以下是一个简单的示例代码,演示如何在一个已知的整数数组中查找指定的元素:
```c
#include <stdio.h>
int main() {
int arr[] = {2, 4, 6, 8, 10};
int n = sizeof(arr) / sizeof(int);
int x = 6;
int i;
for (i = 0; i < n; i++) {
if (arr[i] == x) {
printf("%d is found at index %d\n", x, i);
break;
}
}
if (i == n) {
printf("%d is not found in the array\n", x);
}
return 0;
}
```
在上面的示例代码中,我们定义了一个整数数组 `arr`,其中包含了一些整数。然后,我们定义了一个整数变量 `n`,它表示数组的长度。我们还定义了另一个整数变量 `x`,用于存储我们要查找的元素。接下来,我们使用一个 for 循环来遍历整个数组,查找元素 `x` 是否在数组中出现。如果找到了,我们输出该元素在数组中的下标;如果没有找到,我们输出一个提示信息。
设n个不同的整数排好序后存在数组T[1:n]中。若存在一个下标i,使得T[i]=i,设计一个有效的算法找到该下标。c语言代码实现
可以使用二分查找算法来解决这个问题。首先,我们观察到整数是排好序的,因此可以考虑使用二分查找算法来找到满足条件的下标。具体来说,我们可以从数组的中间开始,比较T[mid]与mid的大小,如果T[mid]小于mid,那么我们在右半部分继续查找,否则我们在左半部分继续查找。如果找到了T[i] = i,则直接返回i,否则返回-1表示没找到。
以下是C语言实现的代码:
```
int findIndex(int T[], int n) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (T[mid] == mid) {
return mid;
} else if (T[mid] < mid) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
```
在主函数中,可以将排好序的整数存储在数组T中,并调用findIndex函数来查找满足条件的下标:
```
int main() {
int T[] = {-3, -1, 1, 3, 5, 7};
int n = sizeof(T) / sizeof(T[0]);
int index = findIndex(T, n);
if (index != -1) {
printf("T[%d] = %d\n", index, T[index]);
} else {
printf("No index i such that T[i] = i\n");
}
return 0;
}
```