一聚教程网:一个值得你收藏的教程网站

热门教程

详细解析java算法之二分查找法的实例

时间:2022-06-29 01:25:02 编辑:袖梨 来源:一聚教程网

java算法之二分查找法的实例详解

原理

假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1。通过数组长度可取出中间位置元素的索引,将其值与目标值比较,如果中间位置元素值大于目标值,则在左部分进行查找,如果中间位置值小于目标值,则在右部分进行查找,如此循环,直到结束。二分查找算法之所以快是因为它没有遍历数组的每个元素,而仅仅是查找部分元素就能找到目标或确定其不存在,当然前提是查找范围为有序数组。

Java的简单实现

packageme.geed.algorithms;
  
publicclassBinarySearch {
  
  /**
   * 从一个有序数组(如升序)中找到值为key元素
   * @param key
   * @param array
   * @return 如果找到目标元素,则返回其在数组中的索引,否则返回-1
   */
  publicstaticintfind(intkey,int[] array){
    intlow =0;
    inthigh = array.length -1;
    while(low <= high) {
      intmid = low + (high - low) /2;
      if(array[mid] > key) {
        high = mid -1;
      }elseif(array[mid] < key) {
        low = mid +1;
      }else{
        returnmid;
      }      
    }
    return-1;   
  }
    
  publicstaticvoidmain(String[] args) {
    // TODO Auto-generated method stub
    int[] array = {2,3,5,9,10,13,23,45,78,89,100,128,256};
    System.out.println("目标元素索引值:"+ BinarySearch.find(9, array));    
    System.out.println("目标元素索引值:"+ BinarySearch.find(26, array));
  }
  
}

输出结果为:

目标元素索引值:3
目标元素索引值:-1

二分查找算法的时间复杂度

假设范围数组长度为N,则二分查找的时间复杂度为O(logN)

原文链接:http://blog.csdn.net/ahence/article/details/50411751

热门栏目