二分搜索针对有序的数组,每次和中间元素比较,如果相等则直接返回,如果不相等则搜索范围可以减半。二分法可以将复杂度从 Ο(n) 降到 Ο(log n)。 本来以为二分法很简单,半分钟搞定,但写起来尼玛才发现不是这里有点问题,就是那里有问题。
针对整数的二分搜索
直接上代码:
- int binary_search(int data[], int n, int x)
- {
- if(n <= 0 || x < data[0] || x > data[n-1]){
- return -1;
- }
- int left = 0, right = n-1;
- int middle;
- while(left <= right){
- middle = (left + right)/2;
- if(x ==