前言
ProgrammingPearls(《编程珠玑》)一书的作者Jon Bentley曾经说过类似的话:“90%的程序员无法正确实现二分查找算法...”
言下之意,只有1/10的程序员能够写出“二分查找算法”来。昨天我突然又看到了这句话,于是就随时打开eclipse写下了,还算顺利。
关于“二分查找算法”
"二分查找算法",很多地方也被称作是“折半查找”或者“折半搜索”,是比较常用的“搜索/查找”算法。其基本思想是,找到最小、最大和中间值,然后再做比较。查找速度快,而且性能好。但是被查找的表需要是有序的(通俗点就是需要排序好的)。
废话不多说,直接上代码吧。
package com.dylan.algorithm; import javax.sound.sampled.Mixer; public class BinarySearch { public static void main(String[] args) { // TODO Auto-generated method stub int arr[] ={10,24,36,47,68,89,130}; int index = Search(arr, 89); System.out.println(index); } /*实现二分查找算法(折半算法) *要确定数组是排序好的 *最好是里面一定包含该元素 */ public static int Search(int[] arr,int key ) { int min =0; int max=arr.length-1; int mid = (min+max)/2; while(arr[mid]!=key){ if (arr[mid]<key) { min=mid+1; }else if (arr[mid]>key) { max=mid-1; } if(max<min){ return -1;//里面不存在值为key的元素 } //继续折半 mid=(min+max)/2; } return mid; } }
感兴趣的同学,可以按照代码去运行试试,看是否能正确查找,是否会出现死循环等等问题。 说实话,这东西我平时在工作中也很少用到,是在几年前为了去面试“突击”过,想不到现在居然还能凭印象写出一点来。近期有时间,也是该温习下基础了。
可能现在大部分的码农,都对“数据结构和算法”方面有些“恐惧”甚至“反感”吧。等改天有时间,我补充用画图的形式,详细的描述下“二分查找算法”的基本思想以及详细的推导步骤。