生成一个含100个随机数的数组,对其进行检索,这里以二分检索为例。
import java.util.Random;
import java.util.Scanner;
//引入随机数的二分检索
public class RandomErfen {
public static void main(String[] args) {
//定义一个含100个随机数的数组,这里我设定了随机数的取值范围<200
int [] numbers = new int [100];
Random random = new Random();
for(int i = 0; i < 100; i++){
numbers[i]= random.nextInt(200);
}
//对数组进行排序
Arrays.sort(numbers);
//输出数组内容
System.out.println("数组顺序为:");
for(int n : numbers){
System.out.print(n+" ");
}
System.out.println("\n请输入一个数字:");
//获取输入的数
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
long startTime = System.currentTimeMillis(); //程序开始时间
binarySearch(numbers,num,100);
long endTime = System.currentTimeMillis();
//调用函数,计算程序运行时间
System.out.println("程序运行时间:" + (endTime - startTime)+"ms");
}
public static int binarySearch(int [] a, int x, int n){
// 在 a[0] <= a[1] <= ... <= a[n-1] 中搜索 x
// 找到x时返回其在数组中的位置,并返回查找次数,否则返回-1
int count=0;
int left = 0; int right = n - 1;
while (left <= right) {
int middle = (left + right)/2;
count++;
if (x == a[middle]){
System.out.println(x+"在数组中的位置下标是"+middle);
System.out.println("查找次数是"+count+"次");
break;
}
if (x > a[middle]) left = middle + 1;
else right = middle - 1;
}
return -1; // 未找到x
}
}