题目:有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当使用二分搜索值为82的结点时,经过多少次比较后查找成功并给出具体过程。
思想:令所查找元素为x,与有序数组a的中间元素a[mid]比较
若x=a[mid],则x在L中的位置就是mid;
如果x<a[mid],则x在a[mid]的前面,二分查找a[p:mid-1];
如果x>a[mid],则x在a[mid]的后面,二分查找a[mid+1:p]。
代码如下#include <iostream>
using namespace std;
int BinarySearch(int a[], int &x, int l, int r)
{
while(r >= l)
{
int m = (l+r)/2;
if(x == a[m]) return m;
if(x < a[m])
r = m-1;
else
l = m+1;
}
return -1;
}
int main(){
int a[13] = {1,3,8,12,32,41,45,62,75,77,82,95,100};
int l = 0, r = 12;
int x;
cout<<"输入查找元素:"<<endl;
cin>>x;
int y = BinarySearch(a, x, l, r);
cout <<"位置为:"<<y+1<<endl;
}
结果