折半查找又称为二分查找,其基于有序的顺序表,设置low和high两个工作指针,分别指向表头元素和表尾元素,记mid=(low+high)/2,每次查找从当前序列mid处开始,和关键字进行对比,若小于关键字的值,则令low=mid+1,即在右半子序列中进行查找;若mid处元素值大于关键字,则令high=mid-1,即在左半子序列中进行查找。
#include <iostream>
using namespace std;
int BinarySearch(int a[], int val, int n) {
int low = 0;
int high = n - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (a[mid] == val) {
return mid;
} else if (a[mid] < val)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
int main() {
int a[10] = {-1, 3, 6, 7, 9, 12, 15, 18, 20, 25};
int index = BinarySearch(a, 9, 10);
cout << index << endl;
return 0;
}