写在前面
有人曾经问过我,什么样的人可以称之为程序员,我那时候是这么回答的:“会编码的人”。这个概念非常狭隘,但是恰恰也说明了问题的本质。
一个需求,有千万种实现方式,程序员就是那些知道如何通过代码完成这个需求的人,只不过差的程序员用的是最笨的方法,好的程序员总在寻找最优的解决方法。
因此,会编码是程序员最基本的能力,如何成为好的程序员,却从来不是一件容易的事。算法就是成为优秀程序员的其中一部分必修课。
截止到目前,满打满算,进入软件行业也有接近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;
}