用C语言写一个实验程序随机产生十个1到20的整数设计一个高效的算法找其中的最元素和最小元素并统计元素之间的比较次数调用该算法执行十次并求元素的平均次数
时间: 2024-09-11 11:03:30 浏览: 73
经典算法大全(c语言版)
在C语言中,我们可以编写一个简单的实验程序来实现这个需求。首先,我们需要创建一个函数`findMinMax`,它接收一个数组和它的长度作为输入,然后找到数组中的最大值、最小值,并记录比较次数。为了提高效率,可以采用一次遍历的方式。
```c
#include <stdio.h>
#include <stdlib.h>
int compare(int a, int b) {
return a - b;
}
void findMinMax(int arr[], int n, int *min, int *max, int *compare_count) {
*min = arr[0];
*max = arr[0];
*compare_count = 0;
for (int i = 1; i < n; i++) {
int temp Compare = compare(arr[i], *min);
if (temp > 0) {
*min = arr[i];
(*compare_count)++;
} else if (temp < 0) {
*max = arr[i];
(*compare_count)++;
}
}
}
int main() {
int array[10];
int min, max, compare_count;
int i;
// 生成10个1到20的随机整数
for (i = 0; i < 10; i++) {
array[i] = rand() % 20 + 1;
printf("Element %d: %d\n", i + 1, array[i]);
}
// 找出最元素和最小元素,记录比较次数
findMinMax(array, 10, &min, &max, &compare_count);
printf("Minimum element: %d\n", min);
printf("Maximum element: %d\n", max);
printf("Average comparisons: %.2f\n", (double)compare_count / 10);
// 执行10次,每次计算并打印结果
for (i = 0; i < 10; i++) {
findMinMax(array, 10, &min, &max, &compare_count);
printf("\nRun %d:\n", i + 1);
printf("Minimum element: %d\n", min);
printf("Maximum element: %d\n", max);
printf("Average comparisons: %.2f\n", (double)compare_count / 10);
}
return 0;
}
```
在这个程序中,我们使用了C标准库的`rand()`函数来生成随机数。注意,在实际应用中,需要包含 `<time.h>` 来初始化随机数种子。运行这个程序将输出每次查找的最小值、最大值以及平均比较次数。
阅读全文