一:折半查找(数组中数据必须连续)
算法:例如1 3 5 6 7 9 中查找7,将1+9除以2为5而7比大,则在6+9除以2 为7。
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int arr[10];
int n;//需要找到的数
for (int i = 0; i < 10; i++)
{
scanf("%d\n", &arr[i]);
}
scanf("%d", &n);
int low = 0;
int mid;
int high = 9;//表示下标
while (low <= high)//当不写等于时,程序将出现错误
{
mid = (low + high) / 2;
if (arr[mid] == n)
{
printf("%d在%d上\n", n,mid);//mid是下标
return 0;//跳出循环,没有return 0 可能导致无限循环
}
else if (arr[mid] > n)
{
high = mid - 1;
}
else if (arr[mid] < n)
{
low = mid + 1;
}
}
printf("查无此数\n");
return 0;
}
实现: