博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找算法的两种实现方式
阅读量:6048 次
发布时间:2019-06-20

本文共 1156 字,大约阅读时间需要 3 分钟。

二分查找的条件是对一组有序数组的查找,这一点很容易忘记,在使用二分查找的时候先要对数组进行排序。

先说一下二分查找的思路:一个有序数组,想要查找一个数字key的下标,首先算出中间下标mid,利用mid把这个数组分为两半,前一半从下标0到mid-1,后一半从mid+1到数组最后一个元素(下标是数组长度减一)。把这个查找的元素key和数组下标为mid的元素进行比较,也就是和中间那个元素进行比较,如果比这个元素的小那么把查找范围缩小到原数组的前一半(把查找下标缩短到0到mid-1),如果比中间mid下标元素大那么范围就是后半部分(下标为mid+1到数组长度减一),这样来回反复取中间比较最后就会定位到要查找元素key的下标。

二分查找有两种实现方式:

  1. 非递归实现
  2. 递归实现

在jdk源码中Arrays数组工具类中已经封装好了二分查找算法,不会写可以看看源码,源码实现的方式肯定是效率比较高的。比如计算数组中间下标mid利用移位运算。

非递归实现:

/**	 * @param array 操作数组	 * @param key 查找元素	 * @return 元素下标	 */	public static int binSearch(int[] array,int key){		int start=0;		int mid;		int end=array.length-1;		while(start<=end){			mid=(end-start)/2+start;			if(key
array[mid]){ start=mid+1; }else{ return mid; } } return -1; }

递归实现:

/**	 * @param array 操作数组	 * @param key 查找元素	 * @param start 开始下标	 * @param end 结束下标	 * @return 元素下标	 */	public static int binSearch1(int[] array,int key,int start,int end){		int mid=(end-start)/2+start;		if(key==array[mid]){			return mid;		}		else if(start>=end){			return -1;		}		else if(key>array[mid]){			return binSearch1(array,key,mid+1,end);		}		else if(key

转载于:https://www.cnblogs.com/duzhentong/p/8576505.html

你可能感兴趣的文章
使用Promise 解决回调地狱
查看>>
rem简单实现移动端适配
查看>>
ios中利用委托在二个视图间传值
查看>>
iOS融云使用原理篇
查看>>
第六章
查看>>
golang+es 爬取网易云音乐评论
查看>>
Math Constants
查看>>
Ajax.BeginForm的异步提交数据 简介
查看>>
Oracle 11g不能导出空表的三种解决方法
查看>>
Wordpress 文章添加副标题
查看>>
21 段实用便捷的 PHP 代码
查看>>
包子凑数
查看>>
CocosStudio文件解析工具CsdAnalysis
查看>>
python 网络通信编程之tcp套接字socket
查看>>
Sql语句批量更新数据(多表关联)
查看>>
设置密码到期的天数
查看>>
Matlab M文件“程序块”注释方法
查看>>
当当网首页——html代码
查看>>
使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
查看>>
asp.net mvc 实战化项目之三板斧
查看>>