**搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。
#include <stdio.h>
int binary_search(int a[],int k, int SZ)
{
int left = 0;
int right = SZ-1;
while(left<=right)
{
int mid = left+(right-left)/2;
if(a[mid] == k)
{
return mid;
}
else if(a[mid]>k)
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
//if(left>right)//不能加上这一条
return -1;
}
int main()
{
int key = 6;
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int sz = sizeof(arr)/sizeof(arr[0]);
int ret = binary_search(arr,key,sz);
if(ret == -1)
{
printf("找不到了\n");
}
else
{
printf("找到了,下标为%d", ret);
}
return 0;
}