二分查找条件:只适用于已经排好(有序)的顺序表。
就是不用最原始的遍历数组 采用两个指针 分别指向两头然后不断的折半查找
#include<iostream>
#include<vector>
using namespace std;
int binarysearch(vector<int>& arr, int target)
{
int low = 0;
int high = arr.size() - 1;
while (low <= high)
{
int mid = (low + high) / 2;
if (arr[mid] == target) { return mid; }
else if (arr[mid] < target) low = mid + 1;
else high = mid - 1;
}
return -1;
}
int main()
{
vector<int>arr = { 1,2,3,4,5,6,7,8,9,10 };
int a =binarysearch(arr, 6);
cout << a << endl;
return 0;
}
至于其中的while(循环条件有没有=?)
low 和high取值到底是 mid+1 还是mid?
这其实是和刚开始的数组的左右闭合确定的,即就是right=N.size()还是N.size-1决定的
【手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找-哔哩哔哩】 https://b23.tv/fFE6TRA