C语言二分查找

思想:将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果x<a[n/2],则只要在数组a的左半部分继续搜索x,如果x>a[n/2],则只要在数组a的右半部搜索x.

注意:while循环中条件为左边小于等于右边

求平均值使用a+(a-b)/2计算防止溢出。并且此过程在循环体内部


代码:

#include<stdio.h>
int main()
{               /* 0 1 2 3 4 5 6 7 8 9*/
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0]) - 1;
int x = 7;
int mid = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (arr[mid] == x)
{
printf("找到坐标为:%d\n", mid);
break;
}
else if (arr[mid]<x)
{
left = mid + 1;
}
else if (arr[mid]>x)
{
right = mid - 1;
}
}
if (left > right)
{
printf("找不到\n");
}


}

猜你喜欢

转载自blog.csdn.net/wakelee14122/article/details/78539684