二分算法
二分查找是一种高效率线性表的查找算法。在查找时必须将线性表中的关键字排好序。
基本思路如下:
1、先确定线性表的中间位置 mid=(first+last)/2
2、比较所要查找的关键字b与中间位置的关键字的大小,如果相等则输出“是”
3、如果大于中间值,就到后半部分查找;如果查到就返回“是”,否则返回“否”
4、如果小于中间值,就到前半部分查找;如果查到就返回“是”,否则返回“否”
package example;
import java.util.Arrays;
import java.util.Scanner;
public class Suanfa {
//查找方法
public static String searchTest(int[] array, int value){
if(array.length==0){
return "数组为空!!";
}else{
//定义该序列的起始下标
int startIndex = 0;
//末尾下标的动态值
int endIndex = array.length-1;
//中间值下标=(起始下标+末尾下标)/2
int middle = (startIndex+endIndex)/2;//在此例子数组中等于3.5
//用while循环查找
while(endIndex >= startIndex){
if(value == array[middle]){
System.out.println("是");
break;
}else if(value > array[middle]){
startIndex = middle+1;
middle = (startIndex+endIndex)/2;
//System.out.println("开始下标为:"+startIndex+"============"+"中间下标为:"+middle);
if(value == array[middle]){
System.out.println("是");
}else{
System.out.println("否");
}
break;
}else if(value < array[middle]){
endIndex = middle - 1;
middle = (startIndex+endIndex)/2;
if(value == array[middle]){
System.out.println("是");
}else{
System.out.println("否");
}
break;
}
}
return "数组中无该数值";
}
}
public static void main(String[] args) {
//定义一数字序列
int[] a = {1,2,3,4,5,6,7,8,9,10};
//int[] a = {1,3,4,5,8,7,9,11,15};
//先升序排序
Arrays.sort(a);
//通过在控制台输入input值
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要查找的数字:");
int input = sc.nextInt();
//调用查找的方法,传入要查找的数字
searchTest(a,input);
}
}