二分查找
使用场景:要求数组有序,如果无序,先排序,再查找。
时间复杂度:
查找要求
如果能找到要查找的数字,返回它的下标。
如果找不到要查找的数字,返回-1。
代码实现
#include <stdio.h>
int main()
{
int arr[] = {13,24,27,35,38,40,59,76,100};
int s=0;
//输入要查找的元素
scanf("%d",&s);
//计算数组中的元素个数
int num = sizeof(arr)/sizeof(arr[0]);
//二分查找函数
int ret = binary_search(arr,s,num);
if(-1 == ret)
{
printf("对不起,没找到你要查找的数字\n");
}
else
{
printf("恭喜你!你找到数字下标是:%d\n",ret);
}
return 0;
}
二分查找代码实现
int binary_search(int arr[],int k,int n)
{
//计算左右下标
//数组起始下标为0
int left = 0;
//右下标为元素个数-1
int right = n - 1;
//查找可能需要多次,通过循环控制
while(left<=right)
{
//计算中间元素
int mid = left + (right - left)/2;
if(arr[mid] < k)
{
left = mid + 1;
}
else if(arr[mid] > k)
{
right = mid - 1;
}
else
return mid;
}
return -1;
}
程序运行结果
![](https://img-blog.csdnimg.cn/img_convert/f35bc7317e974cb09b95ccdd20340586.png)
![](https://img-blog.csdnimg.cn/img_convert/d614b1d9e2fbbb6f0114c66147e7e6f1.png)
![](https://img-blog.csdnimg.cn/img_convert/ea8e9e0b2efe3e0944539a467352f8e0.png)