二分查找的先决条件 :有序序列
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
int binarySearch(int *a, int len, int val) {
if(a == NULL || len <= 0) {
return -1;
}
int left = 0;
int right = len -1;
int mid ; //= left + (right - left)/2;
while(left <= right) {
mid = left + (right - left)/2;
if(a[mid] > val) {
right = mid - 1;
} else if(a[mid] < val) {
left = mid + 1;
} else
return mid;
}
return -1;
}
int main() {
int a[4] = {3,10,2,5};
//二分查找必须是有序的
int len = sizeof(a) / sizeof(int);
int position = binarySearch(a, len, 2);
cout << position <<"\n ++++++++++++++++++++++++++\n";
int b[4] = {1, 2, 3, 4};
int length = sizeof(a) / sizeof(int);
int index = binarySearch(b, length, 2);
cout << index;
return 0;
}
查找结果:
-1
++++++++++++++++++++++++++
1