二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
#include<stdio.h>
int bin_search(int arr[],int key, int left, int right)
{
while(left <= right)
{
int mid = left-(left-right)/2;
//避免使用 int mid=(left+right)/2 防止溢出
if(arr[mid] < key)
{
left = mid+1;
}
else if(arr[mid] > key)
{
right = mid-1;
}
else
return mid;
}
return -1;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int key = 10;
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int ret = bin_search(arr, key, left, right);
if(ret != -1)
{
printf("%d\n", arr[ret]);
}
return 0;
}