输入整数判断该整数是否在数组中
//输入整数,判断该整数是否在数组中(折半查找)
import java.util.Scanner;
public class Example2_5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int start = 0, middle, end;
int a[] = { 12, 25, 33, -6, 56, 100, -40, 0 };
// 对数组排序
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
} //
}
Scanner scanner = new Scanner(System.in);
System.out.println("输入整数,判断该整数是否在数组中");
int number = scanner.nextInt();
end = a.length - 1;
middle = (start + end) / 2;
while (number != a[middle]) {
if (number > a[middle]) {
start = middle + 1;
}
if (number < a[middle]) {
end = middle - 1;
}
middle = (start + end) / 2;
if (start > end) {
System.out.printf("%d不在数组中", number);
break;
}
}
if (number == a[middle]) {
System.out.printf("%d在数组中", number);
}
}
}
可以正常运行,但是和书上写的不一样
书上的程序
import java.util.*;
public class Example2_5_0 {
public static void main(String[] args) {
int start=0,end,middle;
int a[]={12,45,67,89,123,-45,67};
int N=a.length;
for(int i=0;i<N;i++){//选择法排序数组
for(int j=i+1;j<N;j++){
if(a[i]>a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
Scanner scanner=new Scanner(System.in);
System.out.println("输入一个整数,程序判断该整数是否在数组中");
int number=scanner.nextInt();
int count=0;
end=N;
middle=(start+end)/2;
while(number!=middle){
if(number>a[middle])
start=middle;
else if(number<middle)
end=middle;
middle=(start+end)/2;
count++;
if(count>N/2)
break;
}
if(count>N/2)
System.out.printf("%d不在数组中.\n",number);
else
System.out.printf("%d在数组中.\n",number);
}
}
start和end取值有问题吗