其实有序序列的二分查找,思想很简单。就是和中间的值比较然后决定是在左半部分还是右半部分查找。
特别需要注意的点:当在右半边查找的时候,中间的位置要加上左边的起始位置,这才是中间位置的绝对位置。
程序实现:
#include <iostream>
using namespace std;
int binSearch(int a[], int n, int length) {
int left = 0;
int right = length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;//注意偏移量!面试就栽在这里了。
if (a[mid] == n) {
return mid;
}
else if (a[mid] > n) {
right = mid - 1;
}
else {
left = mid + 1;
}
}
return 0;
}
int main() {
int a[10] = { 1, 3, 5, 7, 9, 10, 12, 15, 20 ,25 };
int length = 10;
int n = 25;
int index = binSearch(a, n, length);
cout << index << endl;
return 0;
}
输出结果:
输出结果就不展示了,程序很简单,写得应该是对的。