给定序列,求出序列中的最大和最小元素,并输出比较次数代码
时间: 2024-02-06 11:11:53 浏览: 66
好的,我已经明白你的问题了。以下是一个简单的算法,可以找到给定序列的最大和最小元素,并输出比较次数。
```
#include <stdio.h>
// 定义一个结构体,表示最大值和最小值
struct Pair {
int min;
int max;
};
// 定义一个函数,返回给定序列的最大值和最小值
struct Pair findMinMax(int arr[], int n) {
struct Pair minmax;
int i;
// 如果序列中只有一个元素,则该元素既是最大值又是最小值
if (n == 1) {
minmax.max = arr[0];
minmax.min = arr[0];
return minmax;
}
// 如果序列中有多个元素,则初始化最大值和最小值
if (arr[0] > arr[1]) {
minmax.max = arr[0];
minmax.min = arr[1];
} else {
minmax.max = arr[1];
minmax.min = arr[0];
}
// 在剩余元素中查找最大值和最小值
for (i = 2; i < n; i++) {
if (arr[i] > minmax.max) {
minmax.max = arr[i];
} else if (arr[i] < minmax.min) {
minmax.min = arr[i];
}
}
return minmax;
}
int main() {
int arr[] = {10, 20, 30, 40, 50, 60};
int n = sizeof(arr) / sizeof(arr[0]);
struct Pair minmax;
int comparisons = 0;
minmax = findMinMax(arr, n);
printf("最大值 = %d\n", minmax.max);
printf("最小值 = %d\n", minmax.min);
printf("比较次数 = %d\n", comparisons);
return 0;
}
```
这个算法的时间复杂度是O(n)。在最坏情况下,需要进行2(n-2)次比较,因此比较次数的数量级是O(n)。