二分法查找的前提是数据是有序的,时间复杂度是O(log2n)
没有什么难点,写的太多了,直接上代码:
#include <stdio.h>
int BSearch(int a[], int x, int low, int high)
{
if(low < high)
return -1;
int mid = (low+high)/2;
if(x==a[mid]) return mid;
else if(x<a[mid])
return BSearch(a, x, low, mid);
else
return BSearch(a, x, mid+1, high);
}
void main()
{
int a[] = {1,3,4,5,6,2};
int x = 4;
int bn = BSearch(a, x, 0, 6);
if(bn)
printf("finded\n");
}非递归实现也很简单:
int binary_search(int a[], int l, int r, int x)
{
int mid = (l + r)/2;
while(l <= r && a[mid] != x)
{
if(a[mid] < x)
l = mid+1;
else if(a[mid] > x)
r = mid-1;
mid = (l+r)/2;
}
if(x == a[mid]);
{
printf("the num is in the position:%d\n",mid);
return mid;
}
return -1;
}
本文深入解析了二分查找算法的核心概念,包括其前提条件、时间复杂度以及递归与非递归两种实现方式。通过具体代码示例,详细展示了算法的应用过程。

被折叠的 条评论
为什么被折叠?



