`

java 二分查找

阅读更多

需求:在排好顺序的一串数字中,找到数字T

 

一般解法:从左到右扫描数据,其运行花费线性时间O(N)。然而这个算法并没有用到该表已经排序的事实。

	/**
	 * 
	 * @param array
	 *            顺序数组
	 * @param t
	 *            要查找对象
	 * @return
	 */
	public static <T extends Comparable<? super T>> int Search(T[] array, T t) {
		for (int i = 0; i < array.length; i++) {// 顺序比较
			if (t.compareTo(array[i]) == 0) {
				return i;
			}
		}
		return -1;
	}

 

 

好的解法:验证T是否是居中的元素,如果是就找到了,如果小于(说明居中右侧数据都>T),那么可以用同样的策略于居中元素左侧已经排序的子序列,如果大于,同理。

	/**
	 * 
	 * @param array
	 *            顺序数组
	 * @param t
	 *            要查找对象
	 * @return
	 */
	public static <T extends Comparable<? super T>> int binarySearch(T[] array, T t) {
		int low = 0;// 下限
		int high = array.length - 1; // 上限
		while (low <= high) {
			int i = (low + high) / 2;
			if (t.compareTo(array[i]) > 0) {
				low = i + 1; // 重置下限
			} else if (t.compareTo(array[i]) < 0) {
				high = i - 1;// 重置上限
			} else {
				return i;
			}
		}
		return -1;
	}

       

 

 

        折半查找提供了在O(logN)时间内的contains操作,但是所有其他操作均需要O(N)时间。

        在数据是稳定(即不允许插入操作和删除操作)的应用中,这种操作可能是非常有用的。此时输入数据只需要一次排序,但是此后访问会很快。

 

        大多数时候算法表达式的简明性是以速度的降低为代价的。

 

 

 

 

 

1
0
分享到:
评论
2 楼 shuizhaosi888 2014-12-22  
cywhoyi 写道
关键是你要构建一颗类似于红黑树的时间呢?

不太明白你的意思,,红黑树增删查都是O(logN)。这么复杂的数据结构得慢慢来啊..
1 楼 cywhoyi 2014-12-21  
关键是你要构建一颗类似于红黑树的时间呢?

相关推荐

    java二分查找实现

    Java 二分查找实现 Java 二分查找是搜索有序数组中某个元素的最常用算法之一。它的实现原理是将数组分成两个部分,然后在其中一个部分继续进行搜索,直到找到目标元素或确定目标元素不存在。下面将详细介绍 Java 二...

    java 二分查找 java 二分查找

    java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分查找 java 二分查找java 二分...

    Java二分查找示例代码

    以下是一个简单的Java二分查找的示例代码: ```java public class BinarySearchDemo { public static int binarySearch(int[] array, int target) { int left = 0; int right = array.length - 1; while (left...

    Java 二分查找 算法

    Java 中实现二分查找的基本步骤如下: 1. 首先,设定查找区间的左右边界,通常为数组的第一个元素索引(0)和最后一个元素索引(数组长度减一)。 2. 计算中间索引,即 (左边界 + 右边界) / 2,确保结果为整数。 3....

    java 二分查找法的实现方法

    以下是一个简单的Java二分查找法实现,假设数组已经排序: ```java public class MyBinary { public static int binarySearch(int[] array, int target) { int low = 0; int high = array.length - 1; while ...

    用java二分查找法实现日期搜索

    用java二分查找法实现日期搜索 用java二分查找法实现日期搜索 用java二分查找法实现日期搜索

    Java二分查找递归算法

    Java二分查找递归算法

    java二分查找算法

    ### Java二分查找算法知识点详解 #### 一、二分查找算法概述 二分查找算法是一种在有序数组中查找特定元素的搜索算法。其工作原理是通过将目标值与数组中间元素进行比较来缩小搜索范围,进而达到快速查找的目的。...

    Java二分查找.doc

    Java二分查找 Java二分查找是一种高效的搜索算法,用于在有序数组中搜索目标值。该算法的时间复杂度为O(log n),远远优于线性搜索的O(n)时间复杂度。 二分查找的基本思想 二分查找的基本思想是将搜索范围缩小到...

    java二分查找

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好,占用系统内存较少;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素...

    用java实现二分查找法BianrySearch

    用java实现二分查找法BianrySearch 用java实现二分查找法BianrySearch 用java实现二分查找法BianrySearch

    java实现二分查找

    java实现二分查找,包含时间复杂度的计算

    JAVA实现二分查找

    JAVA用递归和非递归的方法实现二分查找

    Java二分查找和快速排序的Applet程序

    本文将深入探讨Java中实现的两种经典算法:二分查找(Binary Search)和快速排序(Quick Sort),并通过一个名为"WorkDemo"的Applet程序来具体阐述它们的实现方式。 **二分查找**是一种在有序数组中查找特定元素的...

    二分查找java实现

    二分查找的三种实现方式 分别是: while for 递归

    二分查找Java实现

    while(low){ if(x==arr[mid]){ return mid; } else if(mid&gt;0&&x[mid]){... else if(mid){//若前面没有判断,则当要查找数超过arr数组中最大值时出现死循环。 low=mid+1; mid=(low+high)/2; }

    二分查找--java实现

    用java实现了二分查找,效率较高,思路清晰易懂。

    Java二分查找算法实现代码实例

    Java二分查找算法实现代码实例 Java二分查找算法实现代码实例主要介绍了Java中的二分查找算法实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。需要的朋友可以参考下。...

    Java二分查找(普通方法和递归方法)

    在Java中,我们可以使用两种方式实现二分查找:普通方法和递归方法。首先,让我们看看普通方法的实现: ```java public static int binarySearch(int array[], int key) { int mid = array.length / 2; int head ...

    史上最全,逻辑最清晰的Java经典算法教程:二分查找

    在Java中实现二分查找,首先需要一个已排序的数组。在提供的代码示例中,我们有一个名为`sortedArray`的整数数组,包含一系列递增的数值。目标是查找特定的`target`值。 `binarySearch`方法是实现二分查找的核心。...

Global site tag (gtag.js) - Google Analytics