二分法查找下标

二分法查找下标

题目:

折半查找算法,当找到输入元素后显示其在数组中的下标

代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>

int main()
{
// 修正1:up设为9(数组最大下标),low设为0(数组最小下标),初始化found为0
int up = 9, low = 0, mid, found = 0, find;
int a[10] = { 1, 5, 6, 9, 11, 17, 25, 34, 38, 41 };

printf("请输入要查找的数字: ");
// 修正2:scanf添加取地址符 &
scanf("%d", &find);
printf("\n");

// 修正3:循环条件改为逻辑与 &&,且使用 standard 的 low <= up
while (low <= up && !found)
{
mid = (up + low) / 2;

// 修正4:使用 == 进行比较
if (a[mid] == find)
{
found = 1;
// 找到后break是正确的,因为循环条件里有!found,其实break也可以省略,但加上更清晰
break;
}
else if (a[mid] > find)
{
// 修正5:中间值比目标大,说明在左边,up = mid - 1
up = mid - 1;
}
else
{
// 中间值比目标小,说明在右边,low = mid + 1
low = mid + 1;
}
}

if (found)
printf("Found! The index is: %d\n", mid);
else
printf("Not found.\n");

return 0;
}

重点:

  • 如何通过添加判断语句实现“没有找到”

  • 如何实现对最小值或最大值的成功定位


二分法查找下标
http://example.com/2025/12/06/二分法查找下标/
作者
王柏森
发布于
2025年12月6日
许可协议