用c++求一组数中的第二大数问题:用分治算法实现从一组数据中找出第二大的数,并将结果输出。
时间: 2024-02-17 10:02:45 浏览: 84
算法实习:分治算法求n个数的数组中找出第二个最大元素
5星 · 资源好评率100%
好的,以下是使用 C++ 实现基于分治算法找出一组数据中第二大的数的代码,希望可以帮到你:
```c++
#include<iostream>
#include<vector>
using namespace std;
int findSecondMax(vector<int> arr, int start, int end) {
if(start == end)
return INT_MIN;
if(start + 1 == end)
return arr[start];
int mid = start + (end - start) / 2;
int leftMax = findSecondMax(arr, start, mid);
int rightMax = findSecondMax(arr, mid, end);
if(leftMax > rightMax) {
int secondMax = findSecondMax(arr, mid, end);
return max(leftMax, secondMax);
}
else {
int secondMax = findSecondMax(arr, start, mid);
return max(rightMax, secondMax);
}
}
int main() {
vector<int> arr = {3, 4, 2, 6, 1, 7, 5}; //测试数据
int secondMax = findSecondMax(arr, 0, arr.size());
cout << "第二大的数是:" << secondMax << endl;
return 0;
}
```
这个程序中,我们首先定义了一个递归函数 `findSecondMax`,它接受一个数组和数组的起始和结束位置,返回数组中第二大的数。如果数组的长度为 1,返回 INT_MIN,表示没有第二大的数。如果数组的长度为 2,返回数组的第一个元素。否则,我们将数组分为两个部分,对每个部分进行递归操作,找出每个部分的最大值。然后比较两个最大值,返回较小的那个部分的次大值,对该部分进行递归操作,直到找到最大值为止。在主函数中,我们定义了一个测试数据,并调用 `findSecondMax` 函数来找出第二大的数。
希望这个程序可以帮助到你。
阅读全文