二分查找每次排除掉一半不合适的值,所以对于n个元素的情况来说:
一次二分剩下:n/2
两次:n/4
m次:n/(2^m)
最坏情况是排除到最后一个值之后得到结果,所以:
n/(2^m) = 1
2^m = n
所以时间复杂度为:log2(n)
2.二分查找的实现方法:
(1)递归
int RecursiveBinSearch(int arr[], int bottom, int top, int key) { if (bottom <= top) { int mid = (bottom + top) / 2; if (arr[mid] == key) { return mid; } else if (key < arr[mid]) { return RecursiveBinSearch(arr, bottom, mid - 1, key); } else { return RecursiveBinSearch(arr, mid + 1, top, key); } } else { return -1; } }