折半查找也称(二分查找)
大话数据结构298
前提:线性表中的记录必须是关键码有序(通常从小到大),线性表必须采用顺序存储。
思想:取中间记录作为比较对象 , 若给定值与中间记录的关键字相等,则成功;若小于,则在中间记录的左半区继续查找;若大于,在右半区查找。不断重复,直到成功,若无记录,查找失败。
//数组下标从1-n开始存
#include<stdio.h>
#include<iostream>
using namespace std;
int Binary_Search(int *a, int n, int key)
{
int low, high, mid;
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;
}
}
int main()
{
int a[11] = { 0, 1, 16, 24, 35, 47, 59, 62, 73, 88, 99 };
int s = 62;
int x = Binary_Search(a, 11, s);
cout << x << endl;
getchar();
}