折半查找,又为二分法
前提:线性表中的记录为有序的(一般是从小到大)
基本思想:在有序表中,取中间值和要查找的值比较
若等于中间值,则中间值即为要查找的
若小于中间值,则中间值的左半区域继续查找
若大于中间值,则中间值的右半区域继续查找
不断重复上述过程
int Binary_Search(int *a, int len, int key)
{
int left = 0; /* 定义最左边下标 */
int right = len - 1; /* 定义最右边下标 */
int mid;
while (left <= right) /* 必须有等号 */
{
mid = (left + right) / 2; /*折半*/
if (key < a[mid]) /*若查找值比中间值小*/
{
right = mid - 1; /*最右边下标调整到中间下标的前一位*/
}
else if (key > a[mid]) /*若查找值比中间值大*/
{
left = mid + 1; /*最左边下标调整到中间下标的后一位*/
}
else
{
return mid; /*若相等,即mid为要查找的位置*/
}
}
return 0;
}