二分查找

来源:互联网 发布:一落叶而知天下秋素材 编辑:程序博客网 时间:2024/05/17 17:58

二分查找相比于遍历的时间复杂的大大减低。

遍历一个长度为n的数组,时间复杂度为O(n)

而二分查找的时间复杂度是O(logn)

f(x)=log2x 这个函数随着X增长 f(x)增长速度越来越慢,函数图像越来越平缓。

所以二分查找,大大的增大了算法的效率。

二分查找基本思想是:例如1 2 3...100 一个长度为100的数组 要查找数字75

用begin代表查找开始位置 end代表查找结束位置

先将数组二分 begin=0 end=100 mid=(end+begin)/2   mid为中间位置

将75与50做比较 75>50 可推断 75一定在[51,100]这个区间内 这个区间的中间位置为mid=(51+100)/2=75

再进行一次查找 恰好75==mid 查找到所需的元素  

在1~100 100个数中查找75 只用了2次循环就完成了  而且可以根据二分法的原理推出100个数 最多只需要查找 log2(100)=7 次

对任意个数 最多只需要查找log2(n)次

具体代码如下:

#include<stdio.h>int main(){    int list[10001],i,begin=0,end,n,mid,flag=0,count=0;    for(i=0;i<10001;i++)        list[i]=i;    printf("input the number you want to find\n");    scanf("%d",&n);    end=sizeof(list)/sizeof(list[0]);    while(begin<=end)    {        count++;        mid=(begin+end)/2;        if(n>list[mid])        {            begin=mid+1;        }else if(n<list[mid])        {            end=mid-1;        }else        {            flag=1;            break;        }    }    if(flag)printf("find it count=%d\n",count);    else printf("Not find\n");    return 0;}


0 0
原创粉丝点击