`

二分查找实现

 
阅读更多
public class Test {

    public static int binarySearch(Integer[] srcArray,int des) {
        //定义初始最小、最大索引
        int low = 0;
        int high = srcArray.length - 1;
        int max =0;int min=0;
        //确保不会出现重复查找,越界
        while (low <= high) {
            //计算出中间索引值
            int middle = (high + low)>>>1 ;//防止溢出
            if (des == srcArray[middle]) {
                return middle;
                //判断下限
            } else if (des < srcArray[middle]) {
                high = middle - 1;
                //判断上限
            } else {
                low = middle + 1;
            }
        }
        //若没有,则返回-1
        return -1;
    }

    public static void  main(String[] args){
        Integer[] a = {-8,-6,-5,-3,-2,-1,1};
        System.out.println(binarySearch(a,5));
        sort(a);
        sort2(a);
    }


    public static void sort(Integer[] srcArray){
        int max =0; int min = 0;
        int count =0;
        for(Integer i:srcArray){
            count++;
            if(max == 0){
                if(i<0){
                    max = i;
                }
            }else{
                if(i>max && i< 0 ){
                    max = i;
                }
            }
            if(min == 0){
                if(i>0){
                    min = i;
                }else {
                    if(i<min && i>0){
                        min = i;
                    }
                }
            }
        }
        System.out.println(max+" : "+min+" : "+ count);
    }

    public static void sort2(Integer[] srcArray){
        int max =0; int min = 0;
        int s1 = 0;
        int e2 = srcArray.length - 1;
        int mid = 0;
        int count =0;
        do{
            count++;
            mid = (s1+e2)>>>1;
            if(srcArray[mid]>0){
                e2 = mid;
            }else if(srcArray[mid] <0){
                s1=mid;
            }
        } while (srcArray[mid] !=0 && e2-s1>=2);
        if(srcArray[mid] ==0){
            for(int i = mid-1;i>=0;i--){
                count++;
                if(srcArray[i]<0){
                    max = srcArray[i];
                    break;
                }
            }
            for(int j = mid+1;j>=0&& j<e2;j++){
                count++;
                if(srcArray[j]>0){
                    min = srcArray[j];
                    break;
                }
            }
        }else{
            max = srcArray[s1];
            min = srcArray[e2];
        }
        System.out.println(max+" : "+min + " : "+ count);
    }
}

 

分享到:
评论

相关推荐

    java二分查找实现

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

    采用二分查找实现有序序列的查找问题

    采用二分查找实现有序序列的查找问题.具体的实现和算法都是很好的示例。希望大家多多学习和使用。

    分治算法之二分查找实现

    二分查找基于分治算法的实现

    C++ 二分查找的实现

    但是,这段代码存在一些问题,比如不正确的二分查找实现以及逻辑错误等。下面我们将逐步分析并指出这些问题。 1. **输入读取** ```cpp cin &gt;&gt; n; // 输入字符串数组大小 string *s1 = new string[n]; // 动态...

    实现二分查找的完美算法 c++

    `Binary_Search_test`文件可能包含了这些测试用例,用于检查我们的二分查找实现是否符合预期。 二分查找算法在实际应用中非常广泛,例如在数据库索引、大规模数据检索和搜索优化等领域都有应用。理解并能熟练掌握二...

    二分查找办法

    本文将深入探讨两种不同的二分查找实现:健忘版和识别版,并分析它们的效率差异。 首先,让我们了解一下基本的二分查找算法。在有序数组中,二分查找通过不断缩小搜索范围来找到目标值。初始时,我们设定查找范围为...

    算法分析与设计-实验二 二分查找实验报告.docx

    `binarySearch_NotRecursion()`函数是非递归的二分查找实现,而`binarySearch_Recursion()`函数则是递归版本的实现。递归版本通常更具概念清晰性,但可能会占用更多的调用栈空间。 二分查找的时间复杂度是O(logn),...

    C+++版二分查找

    #### 二、C++二分查找实现 在给定的代码示例中,作者首先使用了冒泡排序算法对输入的数组进行排序,然后利用递归方式实现了二分查找算法。 #### 三、冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它重复...

    Python3实现非递归二分查找

    在这个描述中提到的"KarateChop"可能是用来测试二分查找实现的单元测试代码。在Python中,通常使用`unittest`模块进行单元测试。单元测试确保了代码的正确性,对于算法来说,这通常包括测试各种边界条件,如空数组、...

    c++数据结构---二分查找

    ### C++中的二分查找实现 #### 一、二分查找简介 二分查找(Binary Search),又称为折半查找,是一种在有序数组中查找某一特定元素的搜索算法。该算法的工作原理是通过不断地将查找区间分成两部分,比较中间元素与...

    二分查找之网易笔试题

    在这个网易笔试题中,我们将深入探讨两种不同的二分查找实现:基础版本和针对网易笔试题的应用版本。 首先,我们来看基础版本的二分查找。这个版本通常用于查找一个已排序的数组中的目标值。算法的基本思想如下: ...

    二分查找java实现

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

    二分查找算法

    例如,在上述代码中,二分查找算法的实现使用了递归函数,函数BinarySearch将数组Elements分成两个部分,然后根据查找的元素是否在某一部分中,继续对该部分进行二分查找,直到找到该元素或确定该元素不存在于数组...

    二分查找_测试

    在实际编程中,通常会使用循环结构实现二分查找。例如,以下是一个简单的C++实现: ```cpp int binarySearch(int arr[], int left, int right, int target) { while (left ) { int mid = left + (right - left) /...

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

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

    二分查找的实现

    在实现二分查找时,通常有两种方法:递归和迭代。递归方式更加直观,而迭代方式则可能更节省空间。下面分别对这两种方式进行详细讲解。 1. 递归实现: 递归实现二分查找的代码如下: ```python def binary_search_...

    查找算法集(顺序查找、二分查找、插值查找、动态查找)

    在给定的代码中,二分查找算法函数sq_Dichotomy_Search0实现了有序数组的二分查找。它的参数包括被查找数组、数组元素个数和被查找的关键值。函数返回的值是目标元素在数组中的下标,如果没有找到则返回-1。 插值...

    Python基于二分查找实现求整数平方根的方法

    总结一下,Python中基于二分查找实现求整数平方根的方法涉及了以下知识点: 1. 二分查找算法:如何将搜索范围逐步缩小,以及如何根据比较结果更新搜索边界。 2. 数学运算:平方运算和比较运算在寻找平方根过程中的...

Global site tag (gtag.js) - Google Analytics