1.原理简介
要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。最坏情况下,关键词比较次数为 log(n+1) ,时间复杂度:O(logn)
2.C++代码实现
(1)版本1
int BinarySearch1(int a[], int value, int n) //二分查找(折半查找),
{
int low, high, mid;
low = 0;
high = n-1;
while(low<=high)
{
mid = (low+high)/2;
if(a[mid]==value)
return mid;
if(a[mid]>value)
high = mid-1;
if(a[mid]<value)
low = mid+1;
}
return -1;
}
(2)递归版本
int BinarySearch2(int a[], int value, int low, int high) //二分查找,
{
int mid = low+(high-low)/2;
if(a[mid]==value)
return mid;
if(a[mid]>value)
return BinarySearch2(a, value, low, mid-1);
if(a[mid]<value)
return BinarySearch2(a, value, mid+1, high);
}
(3)建立顺序变查找
#define MAXLEN 50
typedef struct
{
int data[MAXLEN];
int len;
}Seqlist;
int main()
{
int i, n, x,low, high, mid;
Seqlist *L;
x = 3;
L = (Seqlist*)malloc(sizeof(Seqlist));
L->len = 0;
cout << "Input length of List:";
cin >> n;
low = 1;high = n;L->len = n;
cout << "Input element of List:" << endl;
for (i = 1; i <= L->len; i++)
cin >> L->data[i];
for (i = 1; i <= L->len; i++)
cout << L->data[i] << " ";
cout << endl;
while (low <= high)
{
mid = (low + high) / 2;
if (L->data[mid] == x)
{
cout << mid;
return mid;
}
else
{
if (L->data[mid] > x)
high = mid - 1;
if (L->data[mid] < x)
low = mid + 1;
}
}
return -1;
}