二分法又称折半查找,属于有序查找算法,二分法查找必须采用顺序存储结构,元素必须是有序的,如果元素无序,则先进行排序再查找。
原理:先找到中间元素,用待查找元素与其比较,可得出该元素大于中间元素,或小于中间元素,由此可以得出方位,进行下一步查找,如果等于中间元素,则返回中间元素下标,如果最后没有查找到该元素,则返回-1,查找到了该元素,则返回对应下标,由此得出该元素的位置。
此方法时间复杂度为O(logn)。
下面是简陋的二分法查找代码。
#include<stdio.h> #include<stdlib.h> int search(int n,int *a,int end) { int i,mid,begin; begin=0; mid=(begin+end)/2; if(n>a[mid]){ for(i=mid;i<end+1;i++){ if(a[i]==n){ return i; } } }else if(n==a[mid]){ return mid; }else{ for(i=mid;i>=0;i--){ if(a[i]==n){ return i; } } } return -1; } int main() { int* a; int i,j,l,m=1; a=(int*)malloc(10*sizeof(int)); for(i=0;i<10;i++){ a[i]=m++; } scanf("%d",&j); l=search(j,a,10); if(l==-1){ printf("不含此元素"); }else{ printf("a[%d]=%d",l,j); } return 0; }