前提是线性表是有序的。
时间复杂度为O(logn)
#include <iostream>
#include <cstdlib>
//顺序表结构
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE + 1]; //存储数组,r[0]作为哨兵或临时变量
int length; //记录顺序表长度
}SqList;
int Binary_Search(int *a, int n, int key){
int low, mid, high;
low = 1;
high = n;
while (low <= high){
mid = (low + high) / 2;
if (key < a[mid])
high = mid - 1;
else if (key > a[mid])
low = mid + 1;
else
return mid;
}
return 0;
}
void main()
{
SqList data;
int len = 10;
//srand((int)time_t(NULL));
data.r[0] = { 0 };
std::cout << "排序前的数列为:";
for (int i = 1; i <= len; ++i)
{
data.r[i] = rand() % 10 + 1;
std::cout << data.r[i] << ' ';
}
data.length = len;
std::cout << std::endl;
int index = Binary_Search(data.r, data.length, data.r[2]);
std::cout << "要查找的记录的下标为:"<<index << std::endl;
}