编写一个JAVA程序,随机产生10个1-20的整数,设计一个高效算法找其中的最大元素和最小元素,并统计元素之间的比较次数。调用 该算法执行10次并求元素的平均比较次数。
时间: 2023-03-20 10:00:47 浏览: 106
以下是一个JAVA程序,可以随机产生10个1-20的整数,并使用高效算法找到其中的最大元素和最小元素,并统计元素之间的比较次数。程序将执行10次,计算元素的平均比较次数:
```java
import java.util.Random;
public class Main {
public static void main(String[] args) {
int totalComparisons = 0;
int numTrials = 10;
for (int i = 0; i < numTrials; i++) {
Random rand = new Random();
int[] arr = new int[10];
for (int j = 0; j < arr.length; j++) {
arr[j] = rand.nextInt(20) + 1;
}
int[] result = findMinMax(arr);
System.out.println("Trial " + (i+1) + ": " + "Min: " + result[0] + ", Max: " + result[1] + ", Comparisons: " + result[2]);
totalComparisons += result[2];
}
double avgComparisons = (double)totalComparisons / numTrials;
System.out.println("Average Comparisons: " + avgComparisons);
}
public static int[] findMinMax(int[] arr) {
int[] result = new int[3];
int comparisons = 0;
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 0; i < arr.length; i += 2) {
comparisons++;
if (i == arr.length - 1) {
min = Math.min(min, arr[i]);
max = Math.max(max, arr[i]);
} else {
comparisons++;
if (arr[i] > arr[i+1]) {
min = Math.min(min, arr[i+1]);
max = Math.max(max, arr[i]);
} else {
min = Math.min(min, arr[i]);
max = Math.max(max, arr[i+1]);
}
}
}
result[0] = min;
result[1] = max;
result[2] = comparisons;
return result;
}
}
```
程序使用一个循环来执行10个试验。在每个试验中,它使用Random类生成10个介于1到20之间的整数,并将它们存储在一个数组中。然后,它调用findMinMax函数来查找最小值和最大值,并统计比较次数。findMinMax函数使用一个简单的算法来查找最小值和最大值。它将数组分成两个部分,并在每个部分中找到最小值和最大值,然后将这些值与当前的最小值和最大值进行比较。在这个算法中,每个元素最多只被比较一次,因此它是非常高效的。
程序将每个试验的结果打印到控制台上,包括最小值、最大值和比较次数。然后它将比较次数添加到totalComparisons变量中,以便在所有试验完成后计算平均比较次数。最后,程序将打印出平均比较次数。
希望
阅读全文