题⽬描述:
折半查找(默认有序表)的代码默写
知识点:
1. 折半查找(BinarySearch)是⼀种在有序数组中快速查找⽬标值的算法。它的基本思想
是通过将⽬标值与数组的中间元素进⾏⽐较,从⽽将搜索范围缩⼩⼀半,然后重复这个过
程直到找到⽬标值或确定⽬标值不存在。
2. 折半查找要求⽬标数组是有序的,否则⽆法使⽤该算法进⾏查找。
时间复杂度:O(logn),其中n是数组的⻓度。每次查找都将搜索范围缩⼩⼀半,所以最坏
情况下的查找次数为logn
空间复杂度:O(1),算法只使⽤了常数变量来保存辅助信息,没有使⽤额外的辅助空间。
思路
1. 初始化左右指针left和right,分别指向数组的起始位置和结束位置。
2. 重复以下步骤,直到left指针⼤于right指针的时候停⽌。
a. 将中间元素与⽬标值进⾏⽐较。
b. 如果中间元素等于⽬标值,表⽰找到了⽬标值,返回中间元素的索引。
c. 如果中间元素⼤于⽬标值,则标指⽬标值可能在该中间元素的左侧,更新右指针为mid-1。
d. 如果中间元素⼩于⽬标值,则标指⽬标值可能在该中间元素的右侧,更新左指针为mid+1。
3. 循环结束仍然没有找到⽬标值,则表⽰⽬标值不存在于数组中。
int binarySearch(int arr[], int length, int target) {
//定义左、右指针
int left = 0;
int right = length - 1;
while (left <= right) {
int mid;
mid = (left + right) / 2; //mid来保存中间元素值的下标
if(arr[mid] == target) {
return mid;
}else if (arr[mid] < target) {// 可能在左侧
left = mid + 1;
}else {
right = mid -1;
}
}
return -1;
}