二分法查找

二分法又称折半查找,属于有序查找算法,二分法查找必须采用顺序存储结构,元素必须是有序的,如果元素无序,则先进行排序再查找。

原理:先找到中间元素,用待查找元素与其比较,可得出该元素大于中间元素,或小于中间元素,由此可以得出方位,进行下一步查找,如果等于中间元素,则返回中间元素下标,如果最后没有查找到该元素,则返回-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;
}

 

posted @ 2020-03-16 17:02  莴苣&  阅读(381)  评论(0编辑  收藏  举报