c语言用分治算法实现找出数组中第二大的数
时间: 2023-09-01 17:08:02 浏览: 78
好的,针对你的问题,我可以给出以下代码实现:
```c
#include <stdio.h>
int find_second_largest(int arr[], int left, int right) {
if (left == right) { // 数组只有一个元素,返回该元素
return arr[left];
} else if (left + 1 == right) { // 数组只有两个元素,返回较大的那个
return arr[left] > arr[right] ? arr[left] : arr[right];
} else {
int mid = (left + right) / 2;
int max_left = find_second_largest(arr, left, mid); // 左半部分的第二大元素
int max_right = find_second_largest(arr, mid + 1, right); // 右半部分的第二大元素
if (max_left > max_right) { // 返回较大的那个
return max_left;
} else {
return max_right;
}
}
}
int main() {
int arr[] = {5, 2, 10, 8, 3, 6};
int n = sizeof(arr) / sizeof(int);
int max = find_second_largest(arr, 0, n - 1);
printf("第二大的数为:%d\n", max);
return 0;
}
```
这里使用了递归的思路,每次将数组分成两半,分别递归求出左半部分和右半部分的第二大元素,最后比较左右两部分的第二大元素,返回较大的那个。