二分查找
来源:互联网 发布:一落叶而知天下秋素材 编辑:程序博客网 时间: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
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- Android getWritableDatabase()和getReadableDatabase区别
- Android-使用ViewFlipper制作图片轮播器
- openstack固定ip和浮动ip
- android界面开发总结
- hiho一下 第十六周 RMQ-ST算法
- 二分查找
- mysql、mssql、oracle 分页总结
- mysql设置远程访问数据库的多种方法
- python爬虫(爬取蜂鸟网高像素图片)_空网页,错误处理
- java基础 变量和静态的总结
- AndroidStudio 进行单元测试
- 1008. Elevator
- Node.js中,获取req请求的原始IP
- Log类简单的使用