JDK自带的二分查找算法和自己写的普通二分查找算法的比较(java二分查找源代码)
来源:互联网 发布:淘宝商家联盟 编辑:程序博客网 时间:2024/05/22 06:18
一、描述
解析和比较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){//采用无符号右移一位,即可以表示除以2int 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 0
- JDK自带的二分查找算法和自己写的普通二分查找算法的比较(java二分查找源代码)
- [查找算法]--二分查找的Java实现
- 普通查找算法和二分查找算法
- 正确的二分查找算法
- 二分查找算法的实现
- 正确的二分查找算法
- 实现二分查找的算法
- 基本的二分查找算法
- 二分查找算法的实现
- 二分查找算法的实现
- 二分查找算法的实现
- 几种二分查找算法的代码和比较
- java版的二分查找算法
- java实现的二分查找算法
- 二分查找算法的JAVA实现
- Java实现的二分查找算法
- Java实现的二分查找算法
- Java实现的二分查找算法
- Leetcode10: Climbing Stairs
- Java 网络爬虫技术
- Arduino Mega 2560与Arduino Uno R3——nRF24L01通信
- ARM中的---汇编指令
- bootloader的移植
- JDK自带的二分查找算法和自己写的普通二分查找算法的比较(java二分查找源代码)
- Python学习笔记(二):语句、数据类型(快速入门篇)
- ThreadPoolExecutor线程池的使用
- 第14题
- 纯CSS写弹出层样式
- [c++]选择排序
- 整数划分问题——动态规划
- c语言之统计元音
- poj 3317 Stake Your Claim(极大极小搜索+记忆化搜索+状态压缩)