编写一个实验程序,随机产生10个1~20的整数,设计一个高效算法,找其中的最大元素和最小元素,并统计元素之间的比较次数。调用该算法执行10次,并求元素的平均比较次数。
输入描述: 由于数据均为随机产生的,故,不需要任何输入.
输出描述: 输出每组中随机产生的10个整数,并输出其中的最大元素、最小元素以及比较的次数,输出10组,最后输出平均的比较次数。
输入样例:
输出样例:
这个取决于你的排序算法,以及你的数据本身是否有序。
不同的排序算法比较次数不同。
比如冒泡
int sort(int * arr, int n)
{
int cnt = 0;
for (int i = 0; i < n - 1; i++)
for (int j = 0; i < n - i - 1; j++)
{
cnt++;
if (arr[j] < arr[j + 1])
{
int t = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = t;
}
}
return cnt; //比较次数
}
private static int maxMin(){
int[] nums = new int[10];
for(int i=0;i<10;i++){
nums[i] = (int) (Math.random()*20+1);
}
int max = nums[0];
int min = nums[0];
int numberOfComparisons = 0;
for(int i=1;i<10;i++){
numberOfComparisons++;
if(max<nums[i]){
max = nums[i];
continue; //知道这个数是大数了,就不用去再次比较了
}else if((min > nums[i])){
min = nums[i];
}
//走到这里,这个数肯定不是大数,但是是不是小数不重要,肯定是比较了一次了
numberOfComparisons++;
}
System.out.println("随机数组:"+Arrays.toString(nums));
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
System.out.println("比较次数:"+numberOfComparisons);
return numberOfComparisons;
}
随机数组:[3, 6, 4, 9, 5, 12, 13, 16, 15, 12]
最大值:16
最小值:3
比较次数:13
随机数组:[1, 1, 13, 16, 8, 12, 15, 17, 5, 20]
最大值:20
最小值:1
比较次数:14
随机数组:[10, 11, 9, 7, 6, 7, 14, 11, 12, 11]
最大值:14
最小值:6
比较次数:16
随机数组:[3, 9, 8, 18, 12, 20, 14, 12, 17, 8]
最大值:20
最小值:3
比较次数:15
随机数组:[12, 12, 14, 15, 8, 7, 13, 13, 2, 10]
最大值:15
最小值:2
比较次数:16
随机数组:[3, 10, 16, 17, 10, 14, 11, 6, 13, 19]
最大值:19
最小值:3
比较次数:14
随机数组:[9, 12, 3, 5, 8, 2, 14, 6, 18, 16]
最大值:18
最小值:2
比较次数:15
随机数组:[10, 4, 4, 1, 6, 8, 8, 7, 18, 7]
最大值:18
最小值:1
比较次数:17
随机数组:[7, 9, 16, 2, 5, 4, 7, 14, 10, 10]
最大值:16
最小值:2
比较次数:16
随机数组:[1, 16, 4, 1, 11, 10, 15, 17, 5, 6]
最大值:17
最小值:1
比较次数:16
平均比较次数:15.2