一:数组二分查找法
- 二分查找法又被称为折半查找,是一种效率较高的查找方法
- 二分查找法的原理:将数组分为三部分,中值(最中间的值),中值前,中值后,将要查找的值和数组的中值进行比较,若小于中值则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。
二分查找法的实例一
/*
需求一:运用二分查找法查找出在数组中{13,15,20,33,54,69,98,110};是否存在54这个数值?
思路:1)先遍历一遍数组中的数据
2)利用角标便于记录数据的位置
3)将数组分为三个部分,中值(mid),中值前(min),中值后(max)
4)先用中值与要查找的那个数先进行比较,确定其位置。小于中值在前面找,反之则后面找。一次类推
5)需进行比较哟啊用到if语句
*/
public class TestArrayDemo{
public static void main(String[] args){
//int [] arr={45,5,6,23,33,56,22};
int [] arr={13,15,20,33,54,69,98,110};
//int index=getIndex(arr,33);
//int index=halfSearch(arr,60);
int index=halfSearch2(arr,54);
System.out.println("index="+index);
}
public static int getIndex(int [] arr,int key){
for (int x=0;x<arr.length;x++){
if(arr[x]==key)
return x;
}
return -1;//返回值为-1时就是不需要返回,退出程序
}
public static int halfSearch(int [] arr,int key){
int max=arr.length-1;
int min=0;
int mid=(max+min)/2;
while(arr[mid]!=key){
if (key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
if(max<mid)
return -1;
mid=(max+min)/2;
}
return mid;
}
public static int halfSearch2(int [] arr,int key){
int max=arr.length-1;
int min=0;
int mid=(max+min)/2;
while(min<=max){
mid=(min+max)>>1;//除以2
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return -1;//返回值为-1时就是不需要返回,退出程序
}
}
运行结果:在第五个位置找到数据
二分查找法的实例二
/*需求一:运用下标查找出在数组中{13,15,20,33,54,69,98,110};70大概在哪个位置其角标为?
思路:1)将数组分为三个部分,中值(mid),中值前(min),中值后(max)
2)先用中值与要查找的那个数先进行比较,确定其位置。小于中值在前面找,反之则后面找。一次类推
3)需进行比较哟啊用到if语句
*/
import java.util.*;
public class TestHalfSearch{
public static void main(String[] args){
int [] arr={13,15,20,33,54,69,98,110};
int index=halfSearch2(arr,70);
System.out.println("index="+index);
//int index1=Arrays.binarySearch(arr,54);//这是系统内有的语言可以直接运用查找位置
//System.out.println("index="+index);//输出结果与此编码出来的结果一致
}
public static int halfSearch2(int [] arr,int key){
int max=arr.length-1;
int min=0;
int mid=(max+min)/2;
while(min<=max){
mid=(min+max)>>1;//>>1意为除以2
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;
}
return min;
}
}
运行结果:
二分查找法的实例三
/*
需求;查找星期
*/
public class TestArrayWeek{
public static void main(String[] args){
String week=getWeek(71);
System.out.println(week);
}
public static String getWeek(int num){
if(num>7 || num<1){
return "错误的星期";
}
string [] weeks={"","星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
return weeks[num];
}
}