用Java语言编写一个程序,随机产生10个1-20的整数,设计一个高效算法找其中的最大元素和最小元素,并统计元素之间的比较次数。调用该算法执行10次并求元素的平均比较次数的代码
时间: 2023-03-12 13:44:45 浏览: 74
可以使用分治法(Divide & Conquer)来实现。通过划分数组,递归求解,最终得到最大元素和最小元素,并记录比较次数。下面是一个示例代码:public class MaxMin {
//记录比较次数
static int count = 0;
//求最大值和最小值
public static void getMaxMin(int[] array, int low, int high) {
// 若只有一个元素,则最大值和最小值都是此元素
if (low == high) {
System.out.println("最大值:" + array[low]);
System.out.println("最小值:" + array[low]);
return;
}
//若有两个元素,则比较两个元素的大小
if (high == low + 1) {
if (array[low] > array[high]) {
System.out.println("最大值:" + array[low]);
System.out.println("最小值:" + array[high]);
} else {
System.out.println("最大值:" + array[high]);
System.out.println("最小值:" + array[low]);
}
count += 1;
return;
}
//若有多个元素,则划分数组,递归求解
int mid = (low + high) / 2;
getMaxMin(array, low, mid);
getMaxMin(array, mid + 1, high);
count += 2;
}
public static void main(String[] args) {
//定义一个数组
int[] array = new int[10];
//循环初始化数组
for (int i = 0; i < 10; i++) {
array[i] = (int) (Math.random() * 20 + 1);
}
//求最大值和最小值
getMaxMin(array, 0, array.length - 1);
System.out.println("比较次数:" + count);
}
}