1.首先二分法只能用于有序数组,其次二分法适合于大数据的查找,可以节约很多时间。
2.它的原理就是利用中间值去不断接近我们需要的值,例如 0,2,4,6,7;我们要找2的下标我们先把两端的下标拿出来,再算出中间的下标 2对应的元素4,用中间的元素去与我们要的值比较,因为2<4,那么下次我们把中间的下标赋值右端且减一,反之就赋给左端且加一。
3.
import java.util.Arrays;
import java.util.Scanner;
public class ISSA {
public void sort(int[] arr) {//排序
for(int i=0;i<arr.length;i++)
{
for(int j=1;j<arr.length;j++)
{
if(arr[j-1]>arr[j])
{
int temp=arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
}
}
}
@SuppressWarnings("resource")//关闭警告,supress:压抑
public static void main(String[] args){
int[] arr=new int[5];
Scanner sc = new Scanner(System.in);
for(int i=0;i<5;i++) {
arr[i]=sc.nextInt();
}
ISSA S=new ISSA();//相当与引用函数
S.sort(arr);//
System.out.print("新数组:");
System.out.println(Arrays.toString(arr));
ISSA F=new ISSA();
F.find(arr);
}
@SuppressWarnings("resource")
public void find(int[] arr) {//二分法的实现
System.out.print("请输入要查找的值:");
Scanner sc=new Scanner(System.in);
int x=sc.nextInt();
int left=0,right=arr.length;
while(left<=right)
{
int mid=(left+right)/2;
if(x<arr[mid])
right=mid-1;
if(x>arr[mid])
left=mid+1;
if(x==arr[mid])
{
System.out.println(mid);
break;
}
}
if(right<=left)
{
System.out.println("找不到");
}
}
}