编写一个java程序,随机产生10个1-20的整数,设计一个高效算法找其中的最大元素和最小元素,并统计元素之间的比较次数。调用该算法执行10次并求元素的平均比较次数。
时间: 2023-09-12 15:05:06 浏览: 114
### 回答1:
以下是Java程序,可以随机产生10个1-20的整数,并设计一个高效算法来查找其中的最大元素和最小元素,并统计元素之间的比较次数。程序将算法执行10次,并计算元素的平均比较次数。
```java
import java.util.Random;
public class MaxMinFinder {
public static void main(String[] args) {
int numTrials = 10; //执行10次
int numElements = 10; //10个元素
int min = 1; //最小值
int max = 20; //最大值
int totalComparisons = 0; //总比较次数
Random rand = new Random();
for (int i = 0; i < numTrials; i++) {
int[] arr = new int[numElements];
for (int j = 0; j < numElements; j++) {
arr[j] = rand.nextInt(max - min + 1) + min; //生成随机数
}
int[] results = findMaxMin(arr); //调用算法
System.out.println("Trial " + (i + 1) + ": Max = " + results[0] + ", Min = " + results[1] + ", Comparisons = " + results[2]);
totalComparisons += results[2]; //记录总比较次数
}
double avgComparisons = totalComparisons / (double) numTrials; //计算平均比较次数
System.out.println("Average comparisons: " + avgComparisons);
}
public static int[] findMaxMin(int[] arr) {
int comparisons = 0;
int max = arr[0];
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
comparisons++;
if (arr[i] > max) {
max = arr[i];
} else if (arr[i] < min) {
min = arr[i];
}
}
int[] results = {max, min, comparisons};
return results;
}
}
```
运行结果会输出10次的最大值、最小值和比较次数,以及元素的平均比较次数。
注意,这个算法的时间复杂度是O(n),其中n是元素的数量。它只需要遍历一次数组,因此比较次数是线性的,即与元素数量成比例。
### 回答2:
以下是一个Java程序,用于随机产生10个1-20的整数,并设计一个高效算法找到其中的最大元素和最小元素,并统计元素之间的比较次数。程序将调用该算法执行10次,并计算元素的平均比较次数。
```java
import java.util.Random;
public class MaximumMinimum {
public static void main(String[] args) {
int totalComparison = 0; // 总比较次数
for (int i = 0; i < 10; i++) {
int[] arr = generateRandomArray(); // 随机生成10个整数的数组
int max = arr[0]; // 最大元素
int min = arr[0]; // 最小元素
int comparison = 0; // 比较次数
for (int j = 1; j < arr.length; j++) {
if (arr[j] > max) {
comparison++;
max = arr[j];
} else if (arr[j] < min) {
comparison++;
min = arr[j];
}
comparison++;
}
totalComparison += comparison;
System.out.println("第" + (i+1) + "次执行,最大元素为: " + max + ",最小元素为: " + min);
System.out.println("比较次数: " + comparison);
System.out.println("------------------------");
}
double averageComparison = totalComparison / 10.0; // 元素的平均比较次数
System.out.println("总比较次数: " + totalComparison);
System.out.println("元素的平均比较次数: " + averageComparison);
}
// 随机生成10个1-20的整数的数组
public static int[] generateRandomArray() {
int[] arr = new int[10];
Random random = new Random();
for (int i = 0; i < 10; i++) {
arr[i] = random.nextInt(20) + 1;
}
return arr;
}
}
```
以上程序通过随机生成一个长度为10的整数数组,然后使用一个简单的循环来找到该数组中的最大元素和最小元素。在循环中,每次比较当前元素与最大/最小元素,并更新它们的值。在每次比较时,比较次数都会自增。最后,程序求出了10次执行的总比较次数,并计算了元素的平均比较次数。
阅读全文