Java实现二分法排序
二分法:(二分法不是只能做数组,这里的数组只是为了举例)
在给出的有序排列的数组中,把目标值和数组中间值进行比较,如果相等,则返回中间值下标,如果目标值小于中间值,就从数组的前半段再次执行二分法查找,如果目标值大于中间值,从数组的后半段开始二分法查找
二分法查找主要是比较的次数少,查找的速度快,平均性能好,但是待查表一定要是有序的,插入删除比较困难,所以二分法查找不适用于经常变动的有序列表.
上代码:
package cn.summerchill.sort;
public class BinarySearch {
public static void main(String[] args) {
//有序排列数组(大到小,小到大无所谓)
int[] array = {1,2,3,4,5,6,7,8,9,10};
//打印二分法的返回值
System.out.println(searchRecursive(array,0,array.length-1,9));
}
public static int searchRecursive(int[] array,int start,int end,int findValue){
if(array==null){
return -1;
}
if(start<=end){
//中间位置
int middle = (start + end)/2;
//中值
int middleValue = array[middle];
if(findValue == middleValue){
//与中值相等就直接返回
//return middle;
return middleValue;
}else if(findValue < middleValue){
//目标值小于中值,在中值前面找(这里调用了二分法的方法)
return searchRecursive(array,start,middle - 1,findValue);
}else {
//目标值大于中值,在中值后面找(这里调用了二分法的方法)
return searchRecursive(array,middle + 1,end,findValue);
}
}else{
//返回-1,查找失败
return -1;
}
}
}
======================2017-10-22晚添加========
自己写二分法:
public class BinarySearch {
public static void main(String[] args) {
Integer arr[] = { 1, 2, 4, 6, 8, 11, 23 };
binarySearch(arr,0,arr.length - 1, 23);
}
public static void binarySearch(Integer[] arr,int start, int end, int num){
if(arr != null && arr.length > 0){
int middle = (end + start) / 2;
//中间的值大于目标值
/*
一开始我处理的方式是 end = middle; start = middle
这样在查找最后一个元素的时候容易造成栈溢出 StackOverFlow
因为查找最后一个元素的时候 (index-1 + index)/2 永远比index 小,找不到最后一个元素
需要对 end - start == 1 做一个单独的判断.
但是如果 end = middle -1 ; start = middle + 1 这种形式就没有问题了.
*/
if(arr[middle] > num){
end = middle - 1;
binarySearch(arr, start, end, num);
}else if(arr[middle] < num){//中间的值小于目标值
start = middle + 1;
binarySearch(arr, start, end, num);
}else{//和中间的值相等
System.out.println("找到对应的值,值为:" + num);
}
}
}
}
Java实现二分法排序的更多相关文章
- java简单的二分法排序
二分法排序的思路:数据元素要按顺序排列,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功:若 x 小于当前位置值,则在数列的前半段中查找:若 x 大于当前位置值则在数列的后 ...
- Java进阶(三十九)Java集合类的排序,查找,替换操作
Java进阶(三十九)Java集合类的排序,查找,替换操作 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对 ...
- [No000087]Linq排序,SortedList排序,二分法排序性能比较
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; ...
- [PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)
冒泡排序: function bubbleSort($array){ $len=count($array); //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++){ / ...
- Java中的排序算法(2)
Java中的排序算法(2) * 快速排序 * 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists). * 步骤为: * 1. 从数 ...
- Java实现常见排序算法
常见的排序算法有冒泡排序.选择排序.插入排序.堆排序.归并排序.快速排序.希尔排序.基数排序.计数排序,下面通过Java实现这些排序 1.冒泡排序 package com.buaa; import j ...
- js 排序:sort()方法、冒泡排序、二分法排序。
js中的排序,这里介绍三种,sort()方法.冒泡排序.二分法排序. 1.sort方法 写法: 数组.sort(); 返回排好序的数组,如果数组里是数字,则由小到大,如果是字符串,就按照第一个字符的 ...
- Comparable与Comparator,java中的排序与比较
1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如s ...
- Java之List排序出错
Java之List排序出错 Bound mismatch: The generic method sort(List<T>) of type Collections is not appl ...
随机推荐
- 在vue中使用后台提供 的token验证方式总结及使用方法
token是相对会叫安全的使用暗码形式的数据传输,由后台产生,并且传输到前台,前台可以将保存,在前台每次发送请求的时候可以携带token,后台可以对token进行验证,通过验证的通过请求可以对数据进行 ...
- Perl语言入门
Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言". Perl语法基础: (1)Perl程序由声 ...
- ArcGIS API for Silverlight/ 开发入门 环境搭建
Silverlight/ 开发入门 环境搭建1 Silverlight SDK下载ArcGIS API for Microsoft Silverlight/WPF ,需要注册一个ESRI Gloab ...
- sublime text2一些使用技巧+插件
一.前言 作为一个前端,有一款好的开发利器是必不可少的,editplus.notepad++都是不错的工具,体积轻巧,启动迅速(dw太浮肿了).最近,又有一款新的编辑器诞生,席卷前端界,惹得无数喜爱, ...
- leetcode-[3]Max Points on a Line
Given n points on a 2D plane, find the maximum number of points that lie on the same straight line 思 ...
- (转) HighCharts 非规律日期 多条曲线的 绘画
转自:http://blog.csdn.net/z69183787/article/details/8651296 项目中需要为A,B 2个元素 绘出统计值的曲线,但A与B 的 时间点 并不一致,查找 ...
- day18(javaEE三大组件之一servlet(简介(一)))
Servlet servlet是小型服务器语言,使用它可以处理前台传递来的信息,servlet进行处理后在响应给前台,其中servlet起到了关键性的作用.前端输入的信息可以持久化的存储在数据库中,并 ...
- Jmeter-接口功能测试
前言 前面已经讲过了如何用Postman做接口功能测试,本篇主要是用Jmeter来演示如何做接口功能测试,这里就大致说一下Jmeter如何用哈,其余的也不多说了. Jmeter接口功能测试实例 因为在 ...
- URAL1099. Work Scheduling(一般图匹配带花树开花算法)
1099. Work Scheduling Time limit: 0.5 second Memory limit: 64 MB There is certain amount of night gu ...
- 三.int , bool , str
03.万恶之源-基本数据类型(int, bool, str) 本节主要内容: 1. python基本数据类型回顾 2. int----数字类型3. bool---布尔类型4. str--- 字符串类 ...