二分法排序-JAVA
二分法查找是一种在有序数组中查找特定元素的搜索算法,数组可以是增序也可以是减序。
二分法查找的思路如下:
(1) 首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。
(2) 如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。直到退出循环(找到退出和没找到退出需要一个flag标记)
二分法查找的时间复杂度O(logn)。
举个简单的例子:
int [ ] numberArray = new int [ ] {-36,0,1,2,10,18,25,50,59,66,78,80,99,103,257,369,478};//定义一个有序的int数组 0-16 一共17个数
我们需要查找数字18,第一步end = 16 ,head = 0 ,mid = 8; array[8] = 59>18 ,因此要在mid的左边找,所以end = mid - 1 =7 ,所以head = 0,end =7,mid = 3,array[3] = 2 <18 所以在mid的右边。所以head = 3 +1 = 4 ,end =7 ,mid = 5,恰好array[5] = 18所以找到了。这里我们需要注意的是在循环里的条件,也就是退出循环的条件。while(head<=end) 为什么等于也要成立呢,假设我们要找的是66,目前head =8,end = 9, mid =8 ,array[8]=59<60 因此 head = mid +1 = 9 这个时候head = end 如果循环不继续那么显然输出的是没找到,但是实际上是存在的,因此while()一定要是小于等于,这个时候head = 9,end = 9 ,mid = 9 ,array[9] = 66因此就找到了。这里其实还有个小发现,就是我们增序的时候如果没有=丢失的数可能是mid右边那个,因为head + end /2 小数点位被舍弃掉了,因此判断的总是左边的那个,例如这里就是(8 +9) /2 = 8 实际上我们找的66恰好在9。
二分法 JAVA代码:
package com.jyy.java;public class ArrayTest2 {public static void main(String[ ] args) {System.out.println("--------------------------------------------------------------------------");int [ ] numberArray = new int [ ] {-36,0,1,2,10,18,25,50,59,66,78,80,99,103,257,369,478};//定义一个有序的int数组 0-16 一共17个数int head = 0;int end = numberArray.length - 1;int mid =(head+ end)/2;int dts = 18;boolean flag2 = true;while(head <= end) {if(numberArray[mid] == dts) {//找到了System.out.println("找到了 index:"+mid);flag2 = false ;break;}else if(numberArray[mid]> dts) {//需要找的值在mid的左边end = mid -1;}else {//numberArray[mid] < dts 需要找的在mid的右边head = mid + 1;}mid =(head+ end)/2;}if(flag2 == true) {System.out.println("没找到");}System.out.println("二分法结束--------------------------------------------------------------------------");}
}
二分法排序-JAVA相关推荐
- java二分法排序_二分法排序讲解『附视频』
二分法排序讲解『附视频』 时间:2017-06-22 来源:华清远见JAVA学院 算法一直是Java编程学习中的重点和难点,今天华清Java学院小编就和大家分享一下Java中的二分法排序. ① ...
- java二分法排序算法_Java中使用二分法排序
在数据结构中学习过关于二分法排序的算法,但都是基于C语言或者C++使用指针的方法,自己因为要在项目中使用到此算法,才开始将原有的程序改写为Java语言的.具体的说明如下: 1.二分法查找插入位置 如果 ...
- 帮我找一个用Java写的二分法排序代码
这是一个使用 Java 语言实现二分法排序的示例代码: import java.util.Arrays;public class BinarySort {public static void main ...
- 二分排序java实现
1.什么是二分排序: 二分排序是指利用二分法的思想对插入排序进行改进的一种插入排序算法,不同于二叉排序,可以利用数组的特点快速定位指定索引的元素: 算法思想:二分法插入排序是在插入第i个元素时,对前面 ...
- 分享一个多线程实现[冒泡][选择][二分法]排序的例子
线程的使用规则我将会在我另一篇文章<Delphi中使用比较少的一些语法>中进行介绍,这里只开放一篇Delphi原代码的算法: //工程文件:Sort_MultiThread.dpr pro ...
- 算法练习5---快速排序Java版
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成 ...
- 八大排序:Java实现八大排序及算法复杂度分析
目录 QUESTION:八大排序:Java实现八大排序及算法复杂度分析 ANSWER: 一:冒泡排序 1.算法分析 2.时间复杂度分析 3.代码 二:选择排序 1.算法分析 2.时间复杂度分析 3.代 ...
- 计数排序和桶排序 java代码实现
文章目录 计数排序 java代码实现 单元测试 桶排序 java代码实现 单元测试 计数排序 java代码实现 package csdn.dreamzuora.sort;import java.uti ...
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序: function bubbleSort($array){ $len=count($array);//该层循环控制 需要冒泡的轮数for($i=1;$i<$len;$i++){ //该 ...
最新文章
- DataGrid列操作
- 学Python有哪些优势
- opencv 操作本地摄像头实现录像
- C++ smart pointer
- ISAkmp载荷头部
- 2016年3月1日Android实习笔记
- 深入了解Oracle IDM审核
- 如何看创建媒体日期_汽车各零部件也有身份证,教你们如何看这些部件的出生日期...
- 【计算机原理篇】原码、反码和补码
- 九度OJ 1059:abc
- [20180614]删除bootstrap$记录无法启动2.txt
- ASP.NET Identity系列01,揭开神秘面纱
- 图像同态滤波 python实现_8图像增强
- 项目进度管理方法——里程碑
- 一款可自定义自动字典生成器---火花
- 腾讯云的服务器解析域名步骤
- 百度智能云OCR获取APIKey和SecretKey
- 电影《终结者2018》
- Charles一键设置Breakpoint(断点)
- zblog asp php,ZBlog你选择PHP还是ASP?
热门文章
- PostgreSQL ----- CHECK 约束
- 利用Matlab 由发动机map数据制作逆发动机map图
- 编程范式(斯坦福大学)学习笔记《二》
- 企业微信开发实战(一、相关说明及注册企业微信)
- java vector的排序_Java用vector容器排序
- 云顶之弈下累了 就来看看C/C++内存管理吧
- 什么是Redis缓存穿透?redis面试题及答案(附面试题大全)
- A script engine for the specified language can not be created
- 数据中台为什么不好搞?
- 到底值不值?TTS语音模块——友军计划(1)