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

简介:      前言            ProgrammingPearls(《编程珠玑》)一书的作者Jon Bentley曾经说过类似的话:“90%的程序员无法正确实现二分查找算法...”      言下之意,只有1/10的程序员能够写出“二分查找算法”来。

     前言

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

}

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

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

目录
相关文章
|
4天前
|
人工智能 编解码 算法
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
本文介绍了通义灵码2.0 AI程序员在嵌入式开发中的实战应用。通过安装VS Code插件并登录阿里云账号,用户可切换至DeepSeek V3模型,利用其强大的代码生成能力。实战案例中,AI程序员根据自然语言描述快速生成了C语言的base64编解码算法,包括源代码、头文件、测试代码和CMake编译脚本。即使在编译错误和需求迭代的情况下,AI程序员也能迅速分析问题并修复代码,最终成功实现功能。作者认为,通义灵码2.0显著提升了开发效率,打破了编程语言限制,是AI编程从辅助工具向工程级协同开发转变的重要标志,值得开发者广泛使用。
3935 64
DeepSeek加持的通义灵码2.0 AI程序员实战案例:助力嵌入式开发中的算法生成革新
|
2天前
|
算法 Java 索引
算法系列之搜素算法-二分查找
二分查找是一种在`有序`数组中查找特定元素的算法。它的基本思想是通过将数组分成两半,逐步缩小查找范围,直到找到目标元素或确定目标元素不存在。
22 9
算法系列之搜素算法-二分查找
|
2月前
|
算法 索引
【算法】——二分查找合集
二分查找基础模版和进阶模版,查找元素位置,搜索插入位置,x的平方根,山脉数组的峰顶索引,寻找峰值,点名
|
6月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
4月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
4月前
|
负载均衡 监控 算法
每个程序员都应该知道的 6 种负载均衡算法
每个程序员都应该知道的 6 种负载均衡算法
547 2
|
5月前
|
算法 程序员 Python
程序员必看!Python复杂度分析全攻略,让你的算法设计既快又省内存!
在编程领域,Python以简洁的语法和强大的库支持成为众多程序员的首选语言。然而,性能优化仍是挑战。本文将带你深入了解Python算法的复杂度分析,从时间与空间复杂度入手,分享四大最佳实践:选择合适算法、优化实现、利用Python特性减少空间消耗及定期评估调整,助你写出高效且节省内存的代码,轻松应对各种编程挑战。
122 1
|
4月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
4月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
189 0