二分/折半查找
- 思路
前提: 数组必须是已经排好序的有序数组。
假设数组为升序排列,把数组一分为二,取中间点mid做比较,如果比mid大, 那么继续在[mid+1,last]中查找,反之
在[first,mid-1]中查找,对子数组继续进行上述操作,直到找到。
- 算法复杂度
平均算法复杂度为: O(n) = logn;最坏情况的算法复杂度为: O(n) = logn;
cpp实现
int binaryOrderSearch(int dest_arr[], int search, int array_size) {
//assume dest_arr is ascend sorted.
int alen = array_size;
int amid = alen/2;
int left = 0;
int right = alen-1;
while(right-left > 0) {
amid = (left+ right) /2;
if (dest_arr[amid] < search) {
left = amid+1;
} else if (dest_arr[amid] > search) {
right = amid-1;
} else {
return amid;
}
}
return -1;
}