博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法:二分搜索法
阅读量:4455 次
发布时间:2019-06-07

本文共 1732 字,大约阅读时间需要 5 分钟。

目录

@(二分搜索法)

例如:

int a[]= {1,2,3,4,5,6,7,8};

一个数组,我们要从中找到5在其中的位置,最简单就是如下:

for(int i=0;i

这种方法用大O表达法分析[^1]的话,

i=0;的频度为1
i<a.length的频度为n; ==a.length的长度不是固定的==
if语句也执行了n次
时间复杂度为:
T(n)= 1+ 2*n;

可以写为T(n)=O(n)

使用二分搜索法的话:

~非递归实现~

public static void main(String[] args) {        // TODO Auto-generated method stub        int a[]= {1,2,3,4,5,6,7,8};        System.out.println(binarySearch(a, 7));        System.out.println(binarySearchp(a, 7,0,a.length-1));    }    /**     * 非递归     * @param a  需要查询的数组     * @param x 需要查询的值     * @return 数组中的索引     */    public static int binarySearch(int a[],int x) {        int l=0,r=a.length-1;        while(l<=r) {            int m=(l+r)/2;            if(a[m]==x) {                return m;            }else if(a[m]>x) {                r=m-1;                            }else {                l=m+1;            }                    }        return -1;    }

~递归实现~

/**     * 递归     * @param a 数组     * @param x 需要查询的值     * @param l 左边的指针     * @param r 右边的指针     * @return  在数组中的索引     */    public static int binarySearchp(int a[],int x,int l,int r) {            int m=(l+r)/2;            int res=0;            if(a[m]==x) {                return  m;            }else if(a[m]>x) {                return binarySearchp(a, x,l,m-1);            }else {                return binarySearchp(a, x,m+1,r);            }                }     public static void main(String[] args) {        // TODO Auto-generated method stub        int a[]= {1,2,3,4,5,6,7,8};        System.out.println(binarySearch(a, 7));        System.out.println(binarySearchp(a, 7,0,a.length-1));    }

==用大O分析二分搜索的算法,可见每次执行一次算法的while循环,搜索数组减少一半,因此最坏情况被执行了O(logn)==

[^1]:大O表示法主要用来
计算算法的时间复杂度

转载于:https://www.cnblogs.com/lzy321/p/10786744.html

你可能感兴趣的文章
Content Server HA搭建
查看>>
vue-textarea 自适应高度
查看>>
(2)数据结构——线性表(链表)实现
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
sqlserver打开对象资源管理器管理的帮助文档的快捷键
查看>>
JBOSSAS 5.x/6.x 反序列化命令执行漏洞(CVE-2017-12149)
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
【设计模式】4、原型模式
查看>>
进入meta模式关闭背光灯
查看>>
webstorm上svn的安装使用
查看>>
【JEECG技术文档】数据权限自定义SQL表达式用法说明
查看>>
使用 Bootstrap Typeahead 组件
查看>>
EF不能很好的支持DDD?估计是我们搞错了!
查看>>
Qt 静态库与共享库(动态库)共享配置的一个小办法
查看>>
linux_cacti 配置之 安装snmp 服务
查看>>
201407-至今
查看>>