折半排序

来源:互联网 发布:大数据微营销公司 编辑:程序博客网 时间:2024/06/04 17:45
/**
* @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;  
  }  
   } 


}

0 0
原创粉丝点击