在一个数组中查找一个指定的数字是否存在,存在则打印下标:
上面是常规操作。
然后就是二分查找的内容了。如果是用一般方法一个一个排查,效率低下,数组内容多了就不太可以了,那么可以从中间开始比较大小,一次就可以排除掉一半的内容了,依据这个思路,再排查一次,每次少掉一半,这样效率会高很多,这就是二分查找,但是前提是有序的数组。
有了这个思路,那么就要先找到数组中间的元素,也就是最两边下标的平均值,然后再去比较。
接下来就是比较,如果目标数字比中间的大的话,那么就得排除中间元素左边所有值,最左边的下标为mid+1,如果小的话,就得排除右边所有值,最右边的下标为mid-1。
但是这些查找不止一次,所以要循环,每查找一次就缩小,所以left和right迟早会碰头,如果最后left>大于right了,就说明没有目标数字了,所以循环的条件是left<right。
综上,代码的结果是:
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//创建一个数组
int k = 0;
scanf("%d", &k);//输入想要查找的值
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0, right = sz - 1;//左右下标
while (left <= right)
{
int mid = (right + left) / 2;//中间元素下标
if (arr[mid] < k)
{
left = mid + 1;
}
else if (arr[mid] > k)
{
right = mid - 1;
}
else
{
printf("下标为%d", mid);
break;
}
}
if (left > right)
{
printf("找不到");
}
return 0;
}
以上就是关于二分查找的全部内容了。