本文是我个人的技术总结,希望对正在研究相关技术的朋友有所帮助。内容不能保证完全正确,如果发现错误,欢迎指正,我会及时修改。
最后修改日期:2019年5月7日
先上代码
int binarySearch(int arr[], int len, int key) {
if (arr == NULL || len <= 0) return -1; //1
int left = 0;
int right = len - 1;
while(left <= right) { //3
int mid = left + ((right - left) >> 1); //2
if (arr[mid] > key) {
right = mid - 1; //3
} else if (arr[mid] < key) {
left = mid + 1; //3
} else {
return mid;
}
}
return -1;
}
需要注意的点
- ①检查函数参数合法性
- ②使用“小下标”加“下标差”,避免数字太大导致溢出;使用位移替代除法可提升性能,尽管微不足道;注意 >> 和 + 的优先级。
- ③临界值
- 时间复杂度 O(log2n)