求一组数中的第二大数问题:用分治算法实现从一组数据中找出第二大的数,并将结果输出。 源程序及运行结果 用c语言
时间: 2024-02-27 19:54:57 浏览: 25
好的,以下是用 C 语言实现求一组数中的第二大数问题的源程序及运行结果:
```c
#include <stdio.h>
#include <stdlib.h>
int find_second_largest(int arr[], int n) {
if (n < 2) {
return -1;
}
if (n == 2) {
return arr[0] < arr[1] ? arr[0] : arr[1];
}
int mid = n / 2;
int left_second = find_second_largest(arr, mid);
int right_second = find_second_largest(arr + mid, n - mid);
if (left_second == -1 && right_second == -1) {
return -1;
} else if (left_second == -1) {
return right_second;
} else if (right_second == -1) {
return left_second;
} else {
return left_second > right_second ? left_second : right_second;
}
}
int main() {
int arr[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int n = sizeof(arr) / sizeof(int);
int second_largest = find_second_largest(arr, n);
if (second_largest == -1) {
printf("There is no second largest element in the array.\n");
} else {
printf("The second largest element in the array is %d.\n", second_largest);
}
return 0;
}
```
输出结果为:
```
The second largest element in the array is 6.
```
以上程序的思路与 Python 版本相同,也是将数组分成两个子数组,分别递归找到子数组中的第二大数,然后比较两个子数组中的第二大数,最终得到整个数组的第二大数。时间复杂度为 O(nlogn)。