/**
* TODO
*/
package com.xeezee.array;
/**
* 二分查找法
*
* @author luoqinglong
* @date 2012-7-30
*/
public class Half {
/**
* @param args
*/
public static void main(String[] args) {
HighArray highArray = new HighArray(10);
highArray.insertData(3);
highArray.insertData(7);
highArray.insertData(14);
highArray.insertData(20);
highArray.insertData(27);
highArray.insertData(29);
try {
System.out.println(highArray.findKey(19));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class HighArray {
private final long[] a;
private int currentIndex = 0;
public HighArray(long[] orig) {
this.a = orig;
}
public HighArray(int caption) {
this.a = new long[caption];
}
public void insertData(long value) {
if (this.currentIndex < this.a.length) {
this.a[this.currentIndex] = value;
this.currentIndex++;
}
}
public boolean deleteData(long value) {
int j;// delete index
for (j = 0; j < this.currentIndex; j++) {
if (value == this.a[j]) {
break;
}
}
if (j == this.currentIndex) {
return false;
} else {
for (int k = j; k < this.currentIndex; k++) {
this.a[k] = this.a[k + 1];
}
this.currentIndex--;
return true;
}
}
/**
* 返回查找数组的index
*
* @param searchData
* @return 数组的index
* @throws InterruptedException
*/
public int findKey(int searchData) throws InterruptedException {
int lowerBound = 0;
int upperBound = this.currentIndex - 1;
int destIndex;
while (true) {
destIndex = (lowerBound + upperBound) / 2;
if (this.a[destIndex] == searchData) {
return destIndex;
} else if (this.a[destIndex] > searchData) {
upperBound = destIndex - 1;
} else {
lowerBound = destIndex + 1;
}
System.out.println(upperBound + "--" + lowerBound);
// 没有找到数据
if (upperBound < lowerBound) {
break;
}
}
return -1;
}
public long[] getA() {
return this.a;
}
}
分享到:
相关推荐
java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分...
while(low){ if(x==arr[mid]){ return mid; } else if(mid>0&&x[mid]){... else if(mid){//若前面没有判断,则当要查找数超过arr数组中最大值时出现死循环。 low=mid+1; mid=(low+high)/2; }
二分查找的三种实现方式 分别是: while for 递归
二分查找 折半查找
### Java二分查找算法知识点详解 #### 一、二分查找算法概述 二分查找算法是一种在有序数组中查找特定元素的搜索算法。其工作原理是通过将目标值与数组中间元素进行比较来缩小搜索范围,进而达到快速查找的目的。...
java实现二分查找,包含时间复杂度的计算
Java 二分查找实现 Java 二分查找是搜索有序数组中某个元素的最常用算法之一。它的实现原理是将数组分成两个部分,然后在其中一个部分继续进行搜索,直到找到目标元素或确定目标元素不存在。下面将详细介绍 Java 二...
Java二分查找 Java二分查找是一种高效的搜索算法,用于在有序数组中搜索目标值。该算法的时间复杂度为O(log n),远远优于线性搜索的O(n)时间复杂度。 二分查找的基本思想 二分查找的基本思想是将搜索范围缩小到...
二分查找的递归与非递归实现(java版)
Java二分查找递归算法
在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...
下面我们将深入探讨Java实现二分查找的具体步骤、示例代码以及其应用场景。 一、二分查找原理 二分查找的基本思想是将数组分为两半,然后比较中间元素与目标值的关系。如果中间元素等于目标值,则查找成功;如果...
用java实现二分查找法BianrySearch 用java实现二分查找法BianrySearch 用java实现二分查找法BianrySearch
用java实现了二分查找,效率较高,思路清晰易懂。
Java 中实现二分查找的基本步骤如下: 1. 首先,设定查找区间的左右边界,通常为数组的第一个元素索引(0)和最后一个元素索引(数组长度减一)。 2. 计算中间索引,即 (左边界 + 右边界) / 2,确保结果为整数。 3....
在Java中,二分查找法通常用于数组或有序列表中,其核心思想是通过不断缩小搜索范围来快速定位目标元素。以下是关于Java实现二分查找法的详细解释: 1. **算法原理**: 二分查找法首先将数组或列表分为左、中、右...
二分查找:分别使用Java和Python实现二分查找算法 二分查找:分别使用Java和Python实现二分查找算法 二分查找:分别使用Java和Python实现二分查找算法 二分查找:分别使用Java和Python实现二分查找算法 二分查找:...
JAVA用递归和非递归的方法实现二分查找
用java二分查找法实现日期搜索 用java二分查找法实现日期搜索 用java二分查找法实现日期搜索
简单地实现了二分查找的可视化。界面很简单就包括两个部分:界面左侧是可视化查找部分,右侧是二分查找的代码。 程序的关键点主要有两点: 1. 如何在页面上表示出查找程序的运行过程。 2. 如何将排序程序的运行...