折半查找

  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.   



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章