JAVA实现之二分查找
二分查找又称折半查找,大多使用与有序的顺序表;
算法思想
首先将其给定的value值与中间位置的元素进行比较,若相等则查找成功,返回该元素的查找位置;若不等,所需查找的元素一定在除中间元素value值以外的前半部分或者后半部分,则根据给定元素值与mid所指元素值(array[mid])进行比较,value>array[mid]时查找后半部分;反之查找前半部分。
代码实现
public class BinarySearch extends Object {
/*
*@Description: 二分查找的实现--一般应用于有序表,且多用于查找元素时,对插入和删除元素方面稍逊!
*@Author WANG##
*@Date: 2021/3/18 23:52
*/
public static void main(String[] args) {
int[] array = new int[]{11, 22, 33, 44, 45, 46, 47, 51, 53};
// int i=binarySearch(array,11);
// System.out.println(array[i]);//取出该数
// System.out.println(i);//输出该数所在位置
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
Scanner scanner = new Scanner(System.in);
int i=scanner.nextInt();
System.out.println(System.currentTimeMillis()+"号冒险家您好,请输入您所需元素:"+i);
binarySearch(array,i);
}
});
thread1.start();
}
private static int binarySearch(int [] array,int values) {
int low=0;
int high=array.length-1;
//使用while循环
/* while (low<=high){
mid=(low+high)/2;
if (array[mid]==values){
System.out.println("==========================================");
System.out.println(System.currentTimeMillis()+"号冒险家!恭喜您成功获取元素:"+values);
}else if (array[mid]<values) {
high=mid-1;
}else {
low=mid+1;
}*/
while (low<=high){
int mid=(low+high)/2;
if (array[mid]>values){
high=mid-1;
}else if (array[mid]<values){
low=mid+1;
}else {
System.out.println("==========================================");
System.out.println(System.currentTimeMillis()+"号冒险家!恭喜您成功获取元素:"+values);
return mid;
}
}
System.out.println(System.currentTimeMillis() + "号冒险家您好,此处无您需要的东西...欢迎下次光临!");
return -1;
}
}
运行结果