博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【代码积累-2】binary search
阅读量:4098 次
发布时间:2019-05-25

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

import java.util.Arrays;public class Test {	int test[] = {49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51,111,222,333,444,546,768};		public void test() {			//排序		Arrays.sort(test);				//二分查找		int result = binarySearch1(test,12);				System.out.println("index = "+result);	}		public int binarySearch0(int[] a,int key) {		return binarySearchImpl0(a,key,0,a.length-1);	}		public int binarySearch1(int[] a,int key) {		return binarySearchImpl1(a,key,0,a.length-1);	}		/*先用递归实现*/	private int binarySearchImpl0(int[] a,int key,int lowindex,int highindex) {		/*int[] a是经过排序的数组,通常是升序排列,如果key超出范围,直接返回,函数只处理在范围内的查找不到的异常*/		if( key > a[highindex] || key < a[lowindex] ) {			return -1;		}				if( lowindex > highindex ) {			return -1;		}				int midindex = (lowindex+highindex)>>>1;		if( key < a[midindex] ) {			return binarySearchImpl0(a,key,lowindex,midindex-1);		} else if( key > a[midindex] ) {			return binarySearchImpl0(a, key, midindex+1, highindex);		} else {			return midindex;		}				/*小结:		 * 1、递归法的好处是函数逻辑结构简单		 * 2、缺点是如果数组体量很大,可能会造成函数栈溢出		 *    制造栈溢出的方法:1、申请一个大的local变量  2、深度递归*/	}		/*使用循环实现*/	private int binarySearchImpl1(int[] a,int key,int lowindex,int highindex) {		int midindex = 0;		int low = lowindex;		int high = highindex;				/*循环截止条件:lowindex > highindex*/		while( low <= high ) {			midindex = (low+high) >>>1;						if( key < a[midindex] ) {				high = --midindex;			} else if( key > a[midindex] ) {				low = ++midindex;			} else {				return midindex;			}		}				return -1;	}}

转载地址:http://vvhii.baihongyu.com/

你可能感兴趣的文章
【Excel】设置自定义单元格格式
查看>>
【Python】logging内置模块基本使用
查看>>
【Python】字典dict类型转换为列表list类型
查看>>
【Python】xlwt和xlrd模块写入和读取.xls版本EXCEL
查看>>
【Python】pymysql模块处理Mysql数据库
查看>>
【Python爬虫】使用urllib.request下载已知链接的网络资源
查看>>
Fiddler在PC/台式对Android进行抓包
查看>>
【Python爬虫】爬取微信公众号文章信息准备工作
查看>>
【Python爬虫】微信公众号历史文章和文章评论API分析
查看>>
【Python】Python简介和Python解释器
查看>>
多任务场景下单线程异步多线程多进程
查看>>
【Python】单线程异步多线程多进程实例
查看>>
【Python爬虫】requests与urllib库的区别
查看>>
【教育】世界上最伟大的25个教育法则
查看>>
【测试工具】在linux测试环境安装bug管理工具禅道
查看>>
【测试工具】在linux测试环境访问禅道数据库
查看>>
【Python】提升Python程序性能的好习惯2
查看>>
【工具】SecureCRT安装和注册
查看>>
【工具】FTP软件FileZilla下载和连接服务器
查看>>
【Python】random模块生成多种类型随机数
查看>>