标签: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