public class BinarySearch {
package com.img.algorithm;
public class BinarySearch {
/**
* @param args
* @author Bruce
*/
public static void main(String[] args) {
int[] origin = {1,2,3,4,5,6,7,8,9};
int result = binarySearch(origin,8);
System.out.println(result);
String[] str = {"wer","erdd","dfre","bruce"};
int re = binarySearch(str,"bruce");
System.out.println(re);
}
public static int binarySearch(int[] arr, int target)//log 2 N <=32(32bit)
{
int low = 0;
int heigh = arr.length - 1;
while(low <= heigh)
{
int mid = (heigh + low) >>> 1;
if(arr[mid] < target)
low = mid + 1;
else if(arr[mid] > target)
heigh = mid - 1;
else
return mid;
}
return -1;
}
public static int binarySearch(String[] keys,String target)
{
int low = -1;
int heigh = keys.length;
while(heigh - low > 1)
{
int mid = (low + heigh) >>> 1;
if(keys[mid].compareTo(target) < 0)
heigh = mid;
else
low = mid;
}
if(low == -1 || keys[low].compareTo(target) != 0)
return -1;
else
return low;
}
}
很久以前这里的
int mid = (heigh + low) >>> 1;
是这样的
int mid = (heigh + low) / 2;
但是这个会在数组足够大的时候溢出,故用了无符号右移解决这个问题。
这个问题在Java的早期版本里面就是一个bug,后来修正了,这个bug的地址是
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5045582
分享到:
相关推荐
二分查找,也被称为折半查找,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,然后比较中间元素与目标值,根据比较结果决定是在左半部分还是右半部分继续查找。这个过程会一直重复,直到...
二分查找算法 二分查找算法是一种高效的查找算法,适用于已经排好序的数组或链表中查找特定的元素。该算法的时间复杂度为O(log n),远远优于顺序查找算法的O(n)。 二分查找算法的基本思想是将数组或链表分成两个...
"折半查找(二分查找)" 折半查找(二分查找)是一种高效的查找算法,对于顺序存储的有序表,可以快速地找到指定的关键字记录。该算法的基本思想是,每次比较给定值 K 与中间位置记录的关键字值,并根据比较结果...
二分查找算法,二分查找算法课件,二分查找算法PPT
在这个"flash as3 二分查找动画演示"项目中,我们看到的是一个用Flash AS3实现的二分查找算法的可视化教程。 二分查找(Binary Search)是计算机科学中一种高效的数据检索方法,适用于已排序的数组或列表。它的基本...
二分查找是一种在有序数组中查找特定元素位置的算法,它利用数组元素排序的特性,通过比较数组中间元素与目标值的大小,将查找区间缩半来加快查找速度。该算法适用于有序集合,能够将时间复杂度从线性查找的O(n)降低...
二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...
### C++ 二分查找法详解 在计算机科学领域,数据结构与算法是核心课程之一,其中二分查找法(Binary Search)是一种高效的查找技术,尤其适用于有序数组或列表的搜索场景。本文将深入探讨C++中实现二分查找法的具体...
二分查找算法是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是目标值,则搜索结束;如果目标值大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且...
Java 二分查找实现 Java 二分查找是搜索有序数组中某个元素的最常用算法之一。它的实现原理是将数组分成两个部分,然后在其中一个部分继续进行搜索,直到找到目标元素或确定目标元素不存在。下面将详细介绍 Java 二...
二分查找,也被称为折半查找,是一种在有序数组中高效地查找特定元素的搜索算法。这个算法的主要思想是利用数组的有序性,通过不断缩小查找范围,直到找到目标值或者确定目标值不存在为止。本篇文章将深入探讨二分...
二分查找,也称为折半查找,是一种在有序数组中搜索特定元素的高效算法。它主要利用了数组的线性特性,通过不断缩小搜索范围来快速定位目标值。在VB(Visual Basic)中,实现二分查找需要理解基本的逻辑控制和数组...
在给定的代码中,二分查找算法函数sq_Dichotomy_Search0实现了有序数组的二分查找。它的参数包括被查找数组、数组元素个数和被查找的关键值。函数返回的值是目标元素在数组中的下标,如果没有找到则返回-1。 插值...
二分查找,也被称为折半查找,是一种在有序数组中高效搜索特定元素的算法。它以其高效率和在适当数据结构中的广泛适用性而闻名。本文将深入探讨两种不同的二分查找实现:健忘版和识别版,并分析它们的效率差异。 ...
这里我们将深入探讨两种常见的查找算法:二分查找和顺序查找。 **一、顺序查找** 顺序查找是最基础的查找算法之一。它的工作原理是从数据集(如数组或列表)的第一个元素开始,逐个比较目标值与当前元素,直到找到...
在Java编程中,文件读取、数组操作、选择排序以及二分查找是常见的编程任务,它们涉及了IO流、数据结构和算法等多个方面。以下是这些知识点的详细解释: 1. **文件读取**:Java提供了丰富的IO流类库用于读取文件。...
二分查找算法,也称为折半查找,是计算机科学中一种高效的搜索算法,尤其适用于已排序的数据集合。这种算法的基本思想是将数据集分为两半,每次比较中间元素与目标值,根据比较结果缩小搜索范围,直至找到目标值或者...
**二分查找(Binary Search)**是一种在有序数组中寻找特定元素的搜索算法。它的基本思想是通过比较中间元素与目标值,不断缩小搜索范围,直到找到目标元素或者确定其不存在。二分查找的时间复杂度为O(log n),在大...