在一个有序数组中如果使用遍历查找可能会浪费很多时间,这时候可以使用二分法查找可以大大提高我们查找的效率。遍历查找最坏时间复杂度是n,而二分法的时间复杂度是,所以有序数组查找中优先使用二分法。
实现代码如下:
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 0;
scanf_s("%d",&k);//查找的数字
int size = sizeof(arr) / sizeof(arr[0]);//数组的元素个数
int left = 0;
int right = size - 1;
int mid = (left + right) / 2;
if (k > size || k < arr[0])//判断范围
{
printf("找不到该数字\n");
}
while (left <= right)
{
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("找到了下标是:%d\n", mid);
break;
}
}
return 0;
}
代码小白,有问题欢迎指正,一起交流学习。