码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-18 22:04:56      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:jdk自带二分查找算法   java源代码   随机数生成函数   arrays.sort   随机数生成范围   

一、描述

解析和比较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>
三、运行结果

技术分享

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

标签:jdk自带二分查找算法   java源代码   随机数生成函数   arrays.sort   随机数生成范围   

原文地址:http://blog.csdn.net/tongyuehong137/article/details/45116619

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!