今天被问到折半查找是怎么实现的?
很尴尬,其实我是学过,感觉当时自己是会了的,但拿起笔,不知道怎么写了。
之后就把代码敲出来,一方面给自己加深印象,另一方面希望能有借鉴价值。
可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回 - 1(折半查找)
#include<stdio.h>
int binary(int arr[], int k, int len)
{
int left = 0;
int right = len;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid]< k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int len = sizeof(arr) / sizeof(arr[0]) - 1;
int input = 0;
printf("请输入1-10之间需要查找的整数\n");
scanf("%d", &input);
int ret = binary(arr, input, len);
if (ret >= 0)
{
printf("找到了,下标为:%d\n", ret);
}
else
{
printf("没找到.\n");
}
return 0;
}