二分法查找
条件:
数组有序
每次查找都跟数组中间位置数字比较大小,如果要找的数字比中间位置的数字小,那查找就从【0,中间位置的下标前一个位置】这个范围查找;如果要找的数字比中间位置的数字大,那查找的范围就变成【中间位置下标的下一个位置,最大位置】。如果要找的数字正好等于中间位置上的数字,那就找到了;
时间复杂度:查找次数 = log2 ^N;
最好的情况一次就找到,最差的情况,数字在边边上,每次都缩小一半的范围去找target
int search(int* nums, int numsSize, int target){
int low =0;
int high = numsSize-1;
int mid = (low + high)/2;
while(low < high)
{
if(target > nums[mid])
{
low = mid +1;
}
else if(target < nums[mid])
{
high = mid-1;
}
else{
return mid;
}
mid = (low + high)/2;//要记得更新,否则就死循环了
}
if(nums[low] == target)
{
return low;
}
return -1;
}
浙公网安备 33010602011771号