[算法篇]二分查找

写在前面
有人曾经问过我,什么样的人可以称之为程序员,我那时候是这么回答的:“会编码的人”。这个概念非常狭隘,但是恰恰也说明了问题的本质。
一个需求,有千万种实现方式,程序员就是那些知道如何通过代码完成这个需求的人,只不过差的程序员用的是最笨的方法,好的程序员总在寻找最优的解决方法
因此,会编码是程序员最基本的能力,如何成为好的程序员,却从来不是一件容易的事。算法就是成为优秀程序员的其中一部分必修课。
截止到目前,满打满算,进入软件行业也有接近3年了。这3年,做过运维、搞过网络、写过代码,奋斗过也迷茫过。有时候人总喜欢不断前行,忘记回头看看来时的路,回顾回顾以前的风景。子曰:“温故而知新”。因此,从今天开始,有时间我会不断更新自己的博客,这是对过去的总结,也是对将来的展望。

这章是算法的开篇,先写一篇关于二分查找的文章。
首先,我们需要明白,什么是二分查找。

概念

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列

算法复杂度

O(logn)

算法实现

public static int binarySearch(Integer[] srcArray,int des){
		//最小的索引
		int start = 0;
		//最大的索引
		int end = srcArray.length;
        
        while(start <= end){
           //等同于(start+end)/2,为什么这么写只是为提高逼格,仔细品一下就知道为什么会这么写
           int middle = (start + end)>>>1;
           if(srcArray[middle] == des){
               return middle;
           }else if(srcArray[middle] > des){
               end = middle - 1;
           }else {
               start = middle + 1;
           }
        }
        //都没有,返回-1表示没找到该值
        return -1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值