查找算法(Java实现)

Posted Genesis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找算法(Java实现)相关的知识,希望对你有一定的参考价值。

1、二分查找算法

package other;

public class BinarySearch {
    /*
     * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据
     */
    public static int binarySearch(int[] arr, int x) {
        int low = 0;   
        int high = arr.length-1;   
        while(low <= high) {   
            int middle = (low + high)/2;   
            if(x == arr[middle]) {   
                return middle;   
            }else if(x <arr[middle]) {   
                high = middle - 1;   
            }else {   
                low = middle + 1;   
            }  
        }  
        return -1;  
    }
    //递归实现二分查找
    public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){    
           int midIndex = (beginIndex+endIndex)/2;    
           if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){  
               return -1;    
           }  
           if(data <dataset[midIndex]){    
               return binarySearch(dataset,data,beginIndex,midIndex-1);    
           }else if(data>dataset[midIndex]){    
               return binarySearch(dataset,data,midIndex+1,endIndex);    
           }else {    
               return midIndex;    
           }    
       }   

    public static void main(String[] args) {
        int[] arr = { 6, 12, 33, 87, 90, 97, 108, 561 };
        System.out.println("循环查找:" + (binarySearch(arr, 87) + 1));
        System.out.println("递归查找"+binarySearch(arr,3,87,arr.length-1));
    }
}

时间复杂度

比如:总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。
由于n/2^k取整后>=1,即令n/2^k=1,
可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn)

以上是关于查找算法(Java实现)的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

片段(Java) | 机试题+算法思路+考点+代码解析 2023

从搜索文档中查找最小片段的算法?

java实现二分查找

java泛型 二分查找

7种基本排序算法的Java实现