经典二分查找算法是最简单的即搜索一个数如果存在返回其索引否则返回-1。int binarySearchint size int targetint leftint right left = 0; right = size- 1; whileleft = right int mid = left + right - left 2;
//size表示数组的大小,target表示要查找的目标数,left表示查找范围的左边界,right表示查找范围的右边界
int binarySearch(int size, int target, int left, int right) {
left = 0; //将查找范围的左边界初始化为0
right = size - 1; //将查找范围的右边界初始化为数组的最后一个元素的下标
while(left <= right) { //循环条件为左边界小于等于右边界
int mid = left + (right - left) / 2; //计算中间元素的下标
if(nums[mid] == target) //如果中间元素等于目标数,则返回中间元素的下标
return mid;
else if (nums[mid] < target) //如果中间元素小于目标数,则在右半部分继续查找
left = mid + 1; //更新左边界为中间元素的右侧
else if (nums[mid] > target) //如果中间元素大于目标数,则在左半部分继续查找
right = mid - 1; //更新右边界为中间元素的左侧
}
return -1; //如果未找到目标数,则返回-1
}
例如,有一个排序好的数组[1, 3, 5, 7, 9, 11, 13],现在要查找数字7的位置。首先将左边界left设置为0,右边界right设置为6。在第一次循环中,计算中间元素的下标mid为(0+6)/2=3,此时nums[mid]=7,说明7在数组中存在,返回mid=3。如果要查找数字8的位置,中间元素为nums[mid]=7,8大于7,因此在右半部分继续查找,将left更新为mid+1=4,右边界仍然为6。在第二次循环中,计算中间元素的下标mid为(4+6)/2=5,此时nums[mid]=11,8小于11,因此在左半部分继续查找,将right更新为mid-1=4,左边界仍然为4。在第三次循环中,计算中间元素的下标mid为(4+4)/2=4,此时nums[mid]=9,8小于9,因此在左半部分继续查找,将right更新为mid-1=3,左边界仍然为4。此时left>right,循环结束,说明数组中不存在数字8,返回-1
原文地址: https://www.cveoy.top/t/topic/eOrg 著作权归作者所有。请勿转载和采集!