折半查找法c语言单重循环代码
时间: 2023-12-10 22:34:23 浏览: 79
根据提供的引用[1],以下是折半查找法C语言单重循环代码:
```c
#include <stdio.h>
#define N 6
int main() {
int a[N] = {1, 5, 10, 15, 20, 30};
int mid;
int value;
int low = 0;
int high = N - 1;
int pos = -1;
printf("请输入要查找的值:");
scanf("%d", &value);
while (low <= high && pos == -1) {
mid = (low + high) / 2;
if (value == a[mid]) {
pos = mid;
} else if (value < a[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
}
if (pos == -1) {
printf("没有找到!");
} else {
printf("a[%d]=%d\n", pos, value);
}
return 0;
}
```
相关问题
折半查找法c语言
折半查找法(二分查找)是一种在有序数组中查找特定元素的算法。它的基本思想是将查找区间按照中点分成两部分,然后判断目标元素在哪一部分中,然后递归地在对应的一部分中查找,直到找到目标元素或者查找区间为空为止。
以下是使用 C 语言实现折半查找法的示例代码:
```c
int binary_search(int arr[], int n, int target) {
int left = 0, right = n - 1;
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` 表示目标元素。变量 `left` 和 `right` 分别表示查找区间的左右边界。在每次循环中,先计算出中点 `mid`,然后根据 `arr[mid]` 与 `target` 的大小关系,更新查找区间的左右边界。如果 `arr[mid]` 等于 `target`,则直接返回 `mid`。如果最终查找区间为空,说明没有找到目标元素,返回 `-1`。
折半查找法c语言求平方跟
折半查找法可以用来求一个数的平方根,思路如下:
1. 定义一个变量 `low` 和 `high`,分别表示平方根可能的最小值和最大值。初值分别为0和这个数本身。
2. 在一个循环中,每次取中间值 `mid`,计算 `mid` 的平方是否等于这个数,如果相等,则直接返回 `mid`。
3. 如果 `mid` 的平方小于这个数,则将 `low` 更新为 `mid`,否则将 `high` 更新为 `mid`。
4. 重复执行步骤2和3,直到 `low` 和 `high` 的值足够接近,即它们的差小于一个足够小的数,比如0.00001。
代码实现如下:
```c
#include <stdio.h>
double sqrt_binary_search(double x) {
double low = 0, high = x;
while (high - low > 0.00001) {
double mid = (low + high) / 2;
double square = mid * mid;
if (square == x) {
return mid;
} else if (square < x) {
low = mid;
} else {
high = mid;
}
}
return (low + high) / 2;
}
int main() {
printf("%f\n", sqrt_binary_search(2)); // 1.414214
printf("%f\n", sqrt_binary_search(4)); // 2.000000
printf("%f\n", sqrt_binary_search(9)); // 3.000000
return 0;
}
```
阅读全文