二分查找的前提是要进行查找的序列必须是有序的,这里我们以升序为例。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
start = 0, end = 8, mid = (0 + 8) / 2;
比如我们查找val = 2;
首先我们比较A[mid]和val, 如果val大,那么我们递归右边,否则我们递归左边。
#include <iostream>
using namespace std;
int A[] = {1,2,3,4,5,6,7,9};
int len = sizeof(A)/sizeof(A[0]);
int Binary(int start, int end, int val)
{
for (int j = start; j <= end; ++j) {
if (A[j] == val)
return j;
}
return -1;
}
int BinarySearch(int start, int end, int val)
{
if (start == 0 && end == 0 && A[0] == val)//只有一位元素
return 0;
if (start < end) {
int mid = (start + end) / 2;
if (A[mid] > val) {//递归左边
BinarySearch(start, mid, val);
return Binary(start, mid, val);
}
else {//递归右边
BinarySearch(mid + 1, end, val);
return Binary(mid + 1, end, val);
}
}
return -1;
}
int main()
{
cout << BinarySearch(0, len - 1, 10) << endl;
return 0;
}