问题描述
输入一个数组,输出数组中的极大值。
//Qt5.12.3+Vs2019
//函数名称:Extremum
//函数作用:求数组内极大值,并返回排序好的数组
//参数作用:1、accuracy:精度
// 2、X:带测数组
//函数返回:排序好的数组
QVector<QPair<double, int>> Extremum(int accuracy, QVector<double> X) {
//创建待处理数组
QVector<double> Dispose_X(360 + accuracy * 2, 0);
for (int i = 0; i < accuracy; i++) {
Dispose_X[i] = X[360 - accuracy + i];
}
for (int i = accuracy; i < accuracy + 360; i++) {
Dispose_X[i] = X[i - accuracy];
}
for (int i = 360 + accuracy; i < 360 + accuracy * 2; i++) {
Dispose_X[i] = X[i - 360 - accuracy];
}
//寻找极大值
QVector<QPair<double, int>> ret;
for (int i = accuracy; i < accuracy + 360; i++) {
bool flag = true;
for (int j = 1; j <= accuracy; j++) {
if (Dispose_X[i] <= Dispose_X[i + j] || Dispose_X[i] <= Dispose_X[i - j]) {
flag = false;
break;
}
}
if (flag == true) {
ret.append({ Dispose_X[i] ,i - accuracy });
}
}
//对极大值进行排序,选择前几个声能流最大的作为目标方位
qSort(ret.begin(), ret.end(), [](QPair<double, int>& a, QPair<double, int>& b) {
return a.first > b.first;
});
return ret;
}