Java实现二分法排序
二分法:(二分法不是只能做数组,这里的数组只是为了举例)
在给出的有序排列的数组中,把目标值和数组中间值进行比较,如果相等,则返回中间值下标,如果目标值小于中间值,就从数组的前半段再次执行二分法查找,如果目标值大于中间值,从数组的后半段开始二分法查找
二分法查找主要是比较的次数少,查找的速度快,平均性能好,但是待查表一定要是有序的,插入删除比较困难,所以二分法查找不适用于经常变动的有序列表.
上代码:
1 package cn.summerchill.sort; 2 3 public class BinarySearch { 4 public static void main(String[] args) { 5 //有序排列数组(大到小,小到大无所谓) 6 int[] array = {1,2,3,4,5,6,7,8,9,10}; 7 //打印二分法的返回值 8 System.out.println(searchRecursive(array,0,array.length-1,9)); 9 } 10 public static int searchRecursive(int[] array,int start,int end,int findValue){ 11 if(array==null){ 12 return -1; 13 } 14 if(start<=end){ 15 //中间位置 16 int middle = (start + end)/2; 17 //中值 18 int middleValue = array[middle]; 19 if(findValue == middleValue){ 20 //与中值相等就直接返回 21 //return middle; 22 return middleValue; 23 }else if(findValue < middleValue){ 24 //目标值小于中值,在中值前面找(这里调用了二分法的方法) 25 return searchRecursive(array,start,middle - 1,findValue); 26 }else { 27 //目标值大于中值,在中值后面找(这里调用了二分法的方法) 28 return searchRecursive(array,middle + 1,end,findValue); 29 } 30 }else{ 31 //返回-1,查找失败 32 return -1; 33 } 34 } 35 }
======================2017-10-22晚添加========
自己写二分法:
1 public class BinarySearch { 2 public static void main(String[] args) { 3 Integer arr[] = { 1, 2, 4, 6, 8, 11, 23 }; 4 binarySearch(arr,0,arr.length - 1, 23); 5 } 6 public static void binarySearch(Integer[] arr,int start, int end, int num){ 7 if(arr != null && arr.length > 0){ 8 int middle = (end + start) / 2; 9 //中间的值大于目标值 10 /* 11 一开始我处理的方式是 end = middle; start = middle 12 这样在查找最后一个元素的时候容易造成栈溢出 StackOverFlow 13 因为查找最后一个元素的时候 (index-1 + index)/2 永远比index 小,找不到最后一个元素 14 需要对 end - start == 1 做一个单独的判断. 15 但是如果 end = middle -1 ; start = middle + 1 这种形式就没有问题了. 16 */ 17 if(arr[middle] > num){ 18 end = middle - 1; 19 binarySearch(arr, start, end, num); 20 }else if(arr[middle] < num){//中间的值小于目标值 21 start = middle + 1; 22 binarySearch(arr, start, end, num); 23 }else{//和中间的值相等 24 System.out.println("找到对应的值,值为:" + num); 25 } 26 } 27 } 28 }
Java实现二分法排序相关推荐
- java利用二分法进行排序
排序算法传送: 排序算法--java实现冒泡排序 排序算法--java实现选择排序 排序算法--java实现直接插入排序 排序算法--java实现二分法排序 排序算法--java实现希尔排序 排序算法 ...
- java二分法排序算法_Java中使用二分法排序
在数据结构中学习过关于二分法排序的算法,但都是基于C语言或者C++使用指针的方法,自己因为要在项目中使用到此算法,才开始将原有的程序改写为Java语言的.具体的说明如下: 1.二分法查找插入位置 如果 ...
- java二分法排序_二分法排序讲解『附视频』
二分法排序讲解『附视频』 时间:2017-06-22 来源:华清远见JAVA学院 算法一直是Java编程学习中的重点和难点,今天华清Java学院小编就和大家分享一下Java中的二分法排序. ① ...
- 帮我找一个用Java写的二分法排序代码
这是一个使用 Java 语言实现二分法排序的示例代码: import java.util.Arrays;public class BinarySort {public static void main ...
- java 怎么自定义排序_Java如何实现List自定义排序
Java如何实现List自定义排序,自定义,即为,详细内容,相关文章,更多关于 Java如何实现List自定义排序 易采站长站,站长之家为您整理了Java如何实现List自定义排序的相关内容. 实体类 ...
- 分享一个多线程实现[冒泡][选择][二分法]排序的例子
线程的使用规则我将会在我另一篇文章<Delphi中使用比较少的一些语法>中进行介绍,这里只开放一篇Delphi原代码的算法: //工程文件:Sort_MultiThread.dpr pro ...
- java中自然排序和比较器排序
这里所说到的Java中的排序并不是指插入排序.希尔排序.归并排序等具体的排序算法.而是指执行这些排序算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样 ...
- java List实体排序
对于java实体集合排序这里总结了三种方法,第一种是通过原生支持的Comparator做排序,第二种是通过java8的Lambda表达式进行排序,第三种是使用apache-common的工具包进行排序 ...
- android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些
学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...
最新文章
- oracle 格式化报表输出,perl的格式化(Format)报表输出实现代码
- Myeclipse中weblogic配置
- 安装完mysql后sqlserver_您还在用下一步下一步的方式安装SQLSERVER和SQLSERVER补丁吗?...
- 画瀑布图_常见的招财风水画之含义
- 【短语学习】盈余量分析(earned value analysis)
- Cocos2D 添加 UIView
- JDK源码解析之 java.lang.System
- 排队接水(洛谷-P1223)
- 将Visual Studio Code和Windows Subsystem for Linux一起使用
- 钉钉日志范文100篇_钉钉的日志模板怎么修改 钉钉日志模板修改教程
- 漏洞扫描工具有哪些_5.4k Star!简单又全面的容器漏洞扫描工具:Trivy
- [转载] c++的vector赋值方法汇总
- 奇怪的ISA服务停止故障
- 机器学习之BP算法推导
- 全志A33_Vstar
- 凌晨起来肝的一篇 Java 学习路线,保证学弟学妹们大三大四的时候顺利找到实习 Offer
- 原子互换:一统公链江湖的神来之笔
- js事件冒泡、阻止事件冒泡以及阻止默认行为
- PHPStorm 显示自动换行
- Kafka创建topic