二分法显然就是不断二等分寻找条件的过程。就象纸一样不断对折,面积不断缩小。在数学数组中就是不断二等分缩小范围。这样无论是计算频率还是运行速度要比普通算法要快很多。
下面用二分法代码以注释的方法理解C语言二分法代码实现。
//首先要注意那个数组必须是你以升序的方式排好的。
int Dichotomy(int n,int array[],int target)//二分法函数算法,其中n为数组中有多少个数,target是需要寻找的数。
{
int left=0,right=n-1,mid=0;
while(left<=right)//首先的left与right必符合该条件,如果最终没有想找的数target,就不进行此循环而是return 0;
{
mid=(left+right)/2;//现在分两半,找到中间的数组序号,并拿中间数组数来判断要去掉左边还是右边。
if(target>array[mid])//如果所寻找的那个数大于中间数组值,那么我们就去掉左边(因为所寻找的那个数在中间数组的右边)。
{
left=mid+1;//改变left初始值,将中间数组号+1 给left(为什么+1,不+1的话得不到while循环left>right的条件)。
}else if(target<array[mid])//如果所寻找的那个数小于中间数组值,那么我们就去掉右边(因为所寻找的那个数在中间数组的左边)。
{
right=mid-1;//类同。
}else//如果以上条件都不符合,那只有target=array[mid],那说明数组中有你想找的数。
{
return 1;//找到那个数我给它为一。
}
}
return 0;//找不你想找的数target,就返回零。
}