简单二分查找

来源:互联网 发布:力矩电机控制算法 编辑:程序博客网 时间:2024/06/04 01:37
package demo.sufa;
import java.util.Arrays;
/** 
* @author  ckl
* @date 创建时间:2017年6月28日 下午3:03:54 
* @version 1.0
* @parameter  
* @since  
* @return  
*/
public class erfengchazhao {


public static void main(String[] args) {
int[] arr = {234,245,77,3,543,67,78,95,378,678,205,753,457,2903,340};
int searchWord = 6780; //所要查找的数字
// int searchCount = 0;//循环的次数
System.out.printf("普通循环查找%d的次数是%d",searchWord,genetalLoop(arr,searchWord));
System.out.printf("二分法查找%d的次数是%d",searchWord,binarySearch(arr,searchWord));


}

static int genetalLoop(int[] arr,int searchWord) {
int searchCount = 0;
for(int i=0;i<arr.length;i++){
searchCount++;
if(searchWord==arr[i]){
break;
}
if(i==arr.length-1){
System.out.println("找不到");
}
}
return searchCount;
}
 
static int binarySearch(int[] arr,int searchWord){
Arrays.sort(arr);
System.out.println("\n"+Arrays.toString(arr));
//二分查找
int iIndex = 0;
int iStart = 0;
int iEnd = arr.length-1;
int searchCount = 0;
for(int i = 0;i<=arr.length/2;i++){
if(i==arr.length/2){
System.out.println("找不到");
break;
}
searchCount++;
iIndex = (iStart+iEnd)/2;
if(arr[iIndex]<searchWord){
System.out.println(arr[iIndex]);
iStart = iIndex;
}else if(arr[iIndex]>searchWord) {
System.out.println(arr[iIndex]);
iEnd = iIndex;
}else if(arr[iIndex]==searchWord){
System.out.println("找到了");
System.out.println(arr[iIndex]);
break;
}
}
return searchCount;
}
 
}