二分查找是一种高效的查找算法,但前提是带查找的元素序列得有序。
代码如下:
int f8(int a[], int length, int key)//length表示最后一个元素下标,间接的是数组长度,表示待查找元素
{
register int left = 0, right = length;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (key>a[mid])//带查找元素在后面一部分
{
left = mid + 1;
}
else if (key < a[mid])//带查找元素在前面一部分
{
right = mid - 1;
}
else
{
return mid;
}
}
return -1;//返回-1表示未找到
}
int main()
{
int a[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
int length = sizeof(a) / sizeof(a[0]) - 1;
printf("输入待查找元素\n");
int num = 0;
scanf("%d", &num);
int ret = f8(a, length, num);
if (-1 == ret)
{
printf("未找到!\n");
}
else
{
printf("找到了,下标为%d\n", ret);
}
system("pause");
return 0;
}
运行结果: