-
原理
将一个数组的首元素下标和尾元素下标相加除以二,得到一个中间元素的下标,再将这个元素与要查找的元素进行比较,根据大小选择一个区间在进行二分查重复几次即可找到目标数字。 -
例子
当使用二分查找后只用四次循环即可找出k,而如果运用普通循环则要进行十次,利用二分查找可以大大提高代码效率。
第一次
left=0,right=9,mid=4.下标为4,在数组中为5,与k进行比较发现arr[mid]<k。在这个时候区间左边变为left+1,右边依旧为right。
第二次
left=5,right=9,mid=7.下标为7,在数组中为8,与k进行比较发现arr[mid]>k。在这个时候区间左边依旧为left,右边变为right-1。
第三次
left=5,right=7,mid=5.下标为5,在数组中为6,与k进行比较发现arr[mid]<k。在这个时候区间左边变为left+1,右边依旧为right。
经过三次变化left=right=6,在数组中为7,即为要选择的数。
不过也有可能要寻找的数不在给出的数组中这时应该报错。 -
代码
-
`# include<stdio.h>
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10};//设置一个有序数组int k = 7;//设置一个需要查找的数
int left = 0;
int right = 9;
int flag = 0;
while (left<=right)
{
int mid = 0;
mid = (left + right) / 2;
if (arr[mid] < k)
{
left = mid + 1;
}
else if(arr[mid] > k)
{
right = mid - 1;
}
else
{
printf(“找到了下标为%d\n”,mid);
flag = 1;
break;
}
}
if (0 == flag)
{
printf(“输入错误找不到该数字\n”);//判断要寻找的数字是否在数组中
}
return 0;
}`
12-13
3082
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交