背景:
二分查找(binarySearch)
二分查找法,又叫做折半查找法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。就用刚刚的数组来说,我们想寻找'7',很简单我们先用7和数组中间的数来比较大小,很明显7大于,所以我们缩小范围,从中间的右边开始继续取中间值,继续寻找,直到找到位置,这样一看找的次数少了很多,而且速度也快了不少。
方法:
- 确定数组的大小
- 设置左右边界left,right
- 根据两边界,确定一个中间变量mid,mid = left + (right - left) / 2; (使用相减的目的是为了避免栈溢出,如果left+right的话,若数组较大,可能会超过最大限制)
- 不断的进行比较,让mid的值不断的发生变化
- 直到找到为止
如果arr[mid] < target(目标值),则右移
int binarySearch(int arr[], int target,int size)
{
int left = 0;
int right = size -1;
while (left <= right)
{
int mid = (right + left) / 2;
if (arr[mid] == target) return mid;
else if (arr[mid] < target) left = mid + 1;
else
{
right = mid - 1;
}
}
return -1;
}