需要的同学评论关注加点赞
有问题可以在评论区提出
折半法判断一个数据是否在一个数组中
对于从小到大排序的数组
只要判断数据是否和数组中间的值相等
如果不相等
当该数据小于数组中间的值
就在数组的前一半数据中继续折半找
否则就在数组后一半数据中继续折半找
import java.util.*;
public class chapter1 {
public static void main(String[] args){
//折半查找
System.out.println();
int start=0,end,middle;
int a[]={12,45,67,89,123,-45,67};
int N=a.length; //长度7
for (int i=0;i<N;i++) { //选择法排序数组、从小到大排序
for (int j=i+1;j<N;j++) {
if (a[j]<a[i]){
int t=a[j];
a[j]=a[i];
a[i]=t;
}
}
}
System.out.println(a[1]); //12
Scanner scanner=new Scanner(System.in);
System.out.println("输入整数,程序判断该整数是否在数组中:");
int number= scanner.nextInt(); //要找的数
int count=0;
end=N; //数组长度7、涉及0/start和a.length/end需注意
middle=(start+end)/2; //折半3.5
while(number!=a[middle]){ //number不等于中间数
if (number>a[middle]){ // number大于中间数
start=middle; //在后半段进行折半,start变大
} else if(number<a[middle]){ // number小于中间数
end=middle; //在前半段进行折半,end变小
}
middle=(start+end)/2; //更新比较数据域
count++; //比较一次加一次,折半一次
if(count>N/2){
break; //注意是count和N/2的关系来判断是否跳出循环
}
}
if(count>N/2){
System.out.printf("%d不在数组中\n",number);
}else{
System.out.println(number+"是数组中的第"+(middle+1)+"个元素");
}
}
}