zoukankan      html  css  js  c++  java
  • java 实现二分查找法(转)

    二分查找又称折半查找,它是一种效率较高的查找方法。 
      【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

    [java] view plaincopy
     
    1. /** 
    2.  * 二分查找又称折半查找,它是一种效率较高的查找方法。  
    3.   【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。 
    4.  * @author Administrator 
    5.  * 
    6.  */  
    7. public class BinarySearch {   
    8.     public static void main(String[] args) {  
    9.         int[] src = new int[] {135789};   
    10.         System.out.println(binarySearch(src, 3));  
    11.         System.out.println(binarySearch(src,3,0,src.length-1));  
    12.     }  
    13.   
    14.     /** 
    15.      * * 二分查找算法 * * 
    16.      *  
    17.      * @param srcArray 
    18.      *            有序数组 * 
    19.      * @param des 
    20.      *            查找元素 * 
    21.      * @return des的数组下标,没找到返回-1 
    22.      */   
    23.    public static int binarySearch(int[] srcArray, int des){   
    24.       
    25.         int low = 0;   
    26.         int high = srcArray.length-1;   
    27.         while(low <= high) {   
    28.             int middle = (low + high)/2;   
    29.             if(des == srcArray[middle]) {   
    30.                 return middle;   
    31.             }else if(des <srcArray[middle]) {   
    32.                 high = middle - 1;   
    33.             }else {   
    34.                 low = middle + 1;   
    35.             }  
    36.         }  
    37.         return -1;  
    38.    }  
    39.         
    40.       /**   
    41.      *二分查找特定整数在整型数组中的位置(递归)   
    42.      *@paramdataset   
    43.      *@paramdata   
    44.      *@parambeginIndex   
    45.      *@paramendIndex   
    46.      *@returnindex   
    47.      */  
    48.     public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){    
    49.        int midIndex = (beginIndex+endIndex)/2;    
    50.        if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){  
    51.            return -1;    
    52.        }  
    53.        if(data <dataset[midIndex]){    
    54.            return binarySearch(dataset,data,beginIndex,midIndex-1);    
    55.        }else if(data>dataset[midIndex]){    
    56.            return binarySearch(dataset,data,midIndex+1,endIndex);    
    57.        }else {    
    58.            return midIndex;    
    59.        }    
    60.    }   
    61.   
    62. }  
  • 相关阅读:
    【洛谷6620】[省选联考 2020 A 卷] 组合数问题(下降幂)
    【AtCoder】AtCoder Grand Contest 033 解题报告
    【AtCoder】AtCoder Grand Contest 034 解题报告
    【洛谷5445】[APIO2019] 路灯(树套树)
    【LOJ6059】「2017 山东一轮集训 Day1」Sum(倍增优化数位DP+NTT)
    【LOJ6159】「美团 CodeM 初赛 Round A」最长树链(树的直径)
    重新入门的Polya定理
    【洛谷6105】[Ynoi2010] y-fast trie(set)
    【BZOJ4480】 [JSOI2013] 快乐的jyy(回文自动机裸题)
    【LOJ6172】Samjia 和大树(树形DP+猜结论)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3071596.html
Copyright © 2011-2022 走看看