二分法是一种高效的查找方法,其适用于已经排好序的数组算法
从数组最中间的数开始查找判断,若不是须要查找的数字,则比较大小,以后则在从中间分开的两边中的一边从最中间开始查找判断,以此类推数组
这里以升序数组为例,降序数组相似code
这里以升序数组为例,降序数组相似io
# include<stdio.h> int f(int, int [], int); int main() { int n; int arr[10]={1,2,3,4,5,6,7,8,9,10}; scanf("%d", &n);//输入要查找的数 int m=f(n, arr, 10-1); if(f(n, arr, 10-1)!=-1) printf("该数所在下标为:%d\n", m); else printf("该数不存在\n"); } int f(int n, int a[], int h) { int i, l, mid; l = 0; while(l<=h)//注意有等号,由于可能最后一次查找就只剩一个数,则这时上下限下标相等 { mid=(l+h)/2;//计算中间下标 if(a[mid]==n)//判断是否为目标数 return mid; else if(a[mid]<n) l=mid+1;//若是中间数小于目标数,则将数组下限改成较大半区的下限 else h=mid-1;//若是中间数大于目标数,则将数组上限改成较小半区的上限 } return -1;//返回-1表示目标数不存在 }