JDK自带的二分查找算法和自己写的普通二分查找算法的比较(java二分查找源代码)

一、描述

解析和比较JDK自带的二分查找算法和自己写的普通二分查找算法,使用二进制位无符号右移来代替除2运算,并使用产生随机数的方法产生一定范围的随机数数组,调用Arrays类的sort()静态方法,对int类型数组进行排序。

Math.random()的用法:会产生一个[0,1)之间的随机数(注意能取到0,不能取到1),这个随机数的是double类型,要想返回指定范围的随机数如[m,n]之间的整数的公式:(int)(Math.random()*(m-n+1)+m)

二、源代码

<span style="font-size:18px;">package tong.yue.sort;

import java.awt.RenderingHints.Key;
import java.util.Arrays;
/**
 * JDK自带的二分查找算法和自己写的普通二分查找算法的比较
 * @author Administrator
 *
 */

public class BinarySearch {

	public static void main(String[] args) {
		//调用randomIntegerArray()方法,随机生成25个数字的数组
		 int[] valueResult = randomIntegerArray(25);
		 //调用Arrays类的sort()静态方法,对以上数组进行排序(二分查找只能针对已经排序的数组才能提高搜索效率)
		 Arrays.sort(valueResult);
		 System.out.print("排序后的结果为:");
		 printArrayLine(valueResult);
		 //例如我要查找20这个数的位置
		 int key = 20;
		 //调用普通二分查找算法
		 int index = binarySearch(valueResult,key);		 
		 System.out.println("普通二分查找算法结果:"+key+"在数组中的下标为:"+index);		 
		 //调用JDK自带的二分查找算法
		 index = binarySearchJDK(valueResult,key);		 
		 System.out.println("JDK自带的二分查找算法结果:"+key+"在数组中的下标为:"+index);
	}
	
	/*
	 *以下方法负责生成n个随机数的数组,并且随机数的范围为0-49 
	 */
	public static int[] randomIntegerArray(int n)           //返回由n个随机数组成的整数对象数组
    {
        int[] value = new int[n];
        for (int i=0; i<value.length; i++)
            value[i]=new Integer((int)(Math.random()*50));//产生一个0-49的随机数
        return value;                                     //返回数组引用
    }
	
	/**
	 * 普通的二分查找方法,查找到关键字则返回关键字所在的数组下标位置,找不到该关键字就返回-1
	 */
	public static int binarySearch(int[] arr,int value) {
		// 二分查找
		int min =0;
		int max = arr.length-1;
		int mid = (min+max)/2;
		
		while(arr[mid]!=value){
			if(arr[mid]>value){
				max = mid-1;
			}else if(arr[mid]<value){
				min = mid+1;
			}
			if(min>max){
				return -1;
			}
			mid = (max+min)/2;
		}
		return mid;
	}
	
	/*
	 * JDK自带的的二分查找方法,查找到关键字则返回关键字所在的数组下标位置,找不到该关键字就返回一个与最后查找位置相关的负数
	 */
	public static int binarySearchJDK(int[] arr,int value) {
		// jdk本身自带的二分查找
		int min =0;
		int max = arr.length-1;		
		while(min<=max){
			//采用无符号右移一位,即可以表示除以2
			int mid = (min+max)>>>1;
			int midValue = arr[mid];
			if(midValue>value){
				max = mid-1;
			}else if(arr[mid]<value){
				min = mid+1;
			}else{
				return mid;
			}			
			
		}
		//没有找到就返回一个与最终位置有关的负数
		return -(min+1);
		
	}
	
	private static void printArrayLine(int[] arr) {
		// 循环打印数组中的值,没打印10个数就换行
		for (int i = 0; i < arr.length; i++) {
			if (i%10==0) {
				System.out.println();
			}
			System.out.print(arr[i] + " ");
			
		}
		System.out.println();

	}

}
</span>
三、运行结果

二分查找算法

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Tomcat8是Apache软件基金会开发的一个开放源代码Java Servlet容器,用于实现Java的服务器端技术。JDK1.8是Java Development Kit的缩,是Java语言的软件开发工具包。Tomcat8需要依赖JDK1.8才能正常运行。 Tomcat8相对于之前的版本有很多改进和新特性。首先,Tomcat8支持Servlet 3.1和JavaServer Pages(JSP) 2.3规范,可以在开发Web应用时使用最新的Java技术。此外,Tomcat8还提供了WebSocket支持,使得建立和管理WebSocket连接更加容易。另外,Tomcat8还支持并发处理机制,可以更好地处理并发请求,提高系统的性能。 而JDK1.8是Java开发的重要版本,也有许多新特性。其中最明显的是引入了Lambda表达式,使得代码编更加简洁和易读。此外,JDK1.8还提供了新的时间和日期API,支持更方便的日期和时间操作。同时,JDK1.8还加强了安全性,提供了新的加密算法和安全协议。 由于Tomcat8是使用Java的,所以它需要一个Java运行环境来执行。JDK1.8提供了Java的运行时环境,包括Java虚拟机和类库。因此,在安装和配置Tomcat8时,需要确保JDK1.8已经正确安装,并且在系统环境变量中配置了正确的Java路径。 总而言之,Tomcat8和JDK1.8是Java开发中的两个重要的组件。Tomcat8是一个用于运行Java Web应用的容器,而JDK1.8则是提供Java运行时环境的工具包。这两个组件的配合使用,可以实现强大的Java Web应用程序的开发和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值