二分查找法
1. 问题
采用二分查找法,在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.
2. 解析
二分查找:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。
时间复杂度:O(log n)
3. 设计
int BiSearch(int list[], int target){
int left = 1;
int right = list.length;
int middle = (left+right)/2;
while(left <= right){
if(list[middle] == target) return middle;
else if(list[middle] > target) right = middle - 1;
else if(list[middle] < target) left = middle + 1;
}
return 0;
}
4. 源码
https://github.com/Marshmello11/Algorithm/tree/master/Experiment_3