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

     前言

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

}

      感兴趣的同学,可以按照代码去运行试试,看是否能正确查找,是否会出现死循环等等问题。 说实话,这东西我平时在工作中也很少用到,是在几年前为了去面试“突击”过,想不到现在居然还能凭印象写出一点来。近期有时间,也是该温习下基础了。

可能现在大部分的码农,都对“数据结构和算法”方面有些“恐惧”甚至“反感”吧。等改天有时间,我补充用画图的形式,详细的描述下“二分查找算法”的基本思想以及详细的推导步骤。

猜你喜欢

转载自blog.csdn.net/dinglang_2009/article/details/20404323