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. }  
  • 相关阅读:
    数组中出现次数超过一半的数字
    字符串的排列(important)
    #pragma mark指令的作用
    类的声明和实现
    OC比C中,新增的数据类型
    NSLog (Log信息的输出)
    C语言中文件相关操作
    static 及 extern
    C语言预处理命令
    结构体
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3071596.html
Copyright © 2011-2022 走看看