您的位置:首页 > 职场人生

90%的程序员无法正确实现二分查找算法???

2014-03-03 22:55 281 查看
     前言

           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;
}

}

     感兴趣的同学,可以按照代码去运行试试,看是否能正确查找,是否会出现死循环等等问题。说实话,这东西我平时在工作中也很少用到,是在几年前为了去面试“突击”过,想不到现在居然还能凭印象写出一点来。近期有时间,也是该温习下基础了。
可能现在大部分的码农,都对“数据结构和算法”方面有些“恐惧”甚至“反感”吧。等改天有时间,我补充用画图的形式,详细的描述下“二分查找算法”的基本思想以及详细的推导步骤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: