折半排序

/**
* @author hbliu
* @param arrayData 數組
* @param searchData 要查找的數據
* @param start 開始下標
* @param end 結束下標
* @return 數據在數組中下標的位置,如果數據不在數組中,返回 -1
* 功   能:折半查找 
*/
public static int splitHalf(int[] arrayData,int searchData,int start,int end){
int index = (start + end)/2;
int data = arrayData[index];
if(start > end ){
return -1;
}
if(data == searchData){
return index;
}else{
if(data < searchData){
return splitHalf(arrayData,searchData,index+1,end);
}else{
return splitHalf(arrayData,searchData,start,index-1);
}
}
}



其他上面的
/**
 * 二分查找又稱折半查找,它是一種效率較高的查找方法。 
【二分查找要求】:1.必須採用順序存儲結構 2.必須按關鍵字大小有序排列。
 * @author Administrator
 *
 */
public class BinarySearch { 
public static void main(String[] args) {
int[] src = new int[] {1, 3, 5, 7, 8, 9}; 
System.out.println(binarySearch(src, 3));
System.out.println(binarySearch(src,3,0,src.length-1));
}


/**
* * 二分查找算法 * *

* @param srcArray
*            有序數組 *
* @param des
*            查找元素 *
* @return des的數組下標,沒找到返回-1
*/ 
   public static int binarySearch(int[] srcArray, int des){ 

int low = 0; 
int high = srcArray.length-1; 
while(low <= high) { 
int middle = (low + high)/2; 
if(des == srcArray[middle]) { 
   return middle; 
}else if(des <srcArray[middle]) { 
   high = middle - 1; 
}else { 
   low = middle + 1; 
}
}
return -1;
   }
      
 /**  
*二分查找特定整數在整型數組中的位置(遞歸)  
*@paramdataset  
*@paramdata  
*@parambeginIndex  
*@paramendIndex  
*@returnindex  
*/
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;  
  }  
   } 


}

發佈了29 篇原創文章 · 獲贊 9 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章