#include <iostream> #include<malloc.h> using namespace std; void solve(int a[], int low, int high, int& max1, int& min1) { if (low == high) { max1 = a[low]; min1 = 0; } else if (low == high - 1) { max1 = max(a[low], a[high]); min1 = min(a[low], a[high]); } else { int mid = (low + high) / 2; int lmax1, lmin1; solve(a, low, mid, lmax1, lmin1); int rmax1=0, rmin1=0; solve(a, mid+1,high, lmax1, lmin1); if (lmax1 > rmin1) { max1 = lmax1; min1 = max(lmin1, rmax1); } else { max1 = rmax1; min1 = max(lmax1, rmin1); } } } int MMsort() { int n; int max1, min1; int a[100]; cout << "请输入数组长度:"; cin >> n; cout << "请输入数组元素:"; for (int i = 0; i < n; i++) { cin >> a[i]; } solve(a, 0, n - 1, max1, min1); cout << "最大年龄:" << a; cout << "最小年龄:" << n; return 0; }优化这段程序使其合理
时间: 2024-01-07 07:05:01 浏览: 104
#include <iostream> #include<iomanip> using namespace std;九九乘法表
以下是对该程序的优化建议:
1. 增加注释:程序中应该添加必要的注释,解释函数的作用,参数的含义,以及算法的实现原理。
2. 算法实现有误:程序中的 solve 函数在递归调用右子数组时,将左子数组的结果传递给了右子数组,导致结果出错。正确的代码如下:
```
void solve(int a[], int low, int high, int& max1, int& min1) {
if (low == high) {
max1 = a[low];
min1 = a[low];
}
else if (low == high - 1) {
max1 = max(a[low], a[high]);
min1 = min(a[low], a[high]);
}
else {
int mid = (low + high) / 2;
int lmax1, lmin1, rmax1, rmin1;
solve(a, low, mid, lmax1, lmin1);
solve(a, mid+1, high, rmax1, rmin1);
max1 = max(lmax1, rmax1);
min1 = min(lmin1, rmin1);
}
}
```
3. 变量命名不规范:变量名应该具有一定的描述性,让人能够直观地理解其含义。例如,变量 max1 和 min1 可以改为 max_age 和 min_age。
4. 冗余代码:程序中的 cout 语句输出的结果不正确,应该输出 max_age 和 min_age 的值,而不是数组的首尾元素。同时,程序中的头文件 malloc.h 没有被使用到,可以删除。
以下是优化后的代码:
```
#include <iostream>
using namespace std;
// 求解数组中的最大值和最小值
void solve(int a[], int low, int high, int& max_age, int& min_age) {
if (low == high) {
max_age = a[low];
min_age = a[low];
}
else if (low == high - 1) {
max_age = max(a[low], a[high]);
min_age = min(a[low], a[high]);
}
else {
int mid = (low + high) / 2;
int lmax, lmin, rmax, rmin;
solve(a, low, mid, lmax, lmin);
solve(a, mid+1, high, rmax, rmin);
max_age = max(lmax, rmax);
min_age = min(lmin, rmin);
}
}
int main() {
int n, max_age, min_age;
int a[100];
cout << "请输入数组长度:";
cin >> n;
cout << "请输入数组元素:";
for (int i = 0; i < n; i++) {
cin >> a[i];
}
solve(a, 0, n - 1, max_age, min_age);
cout << "最大年龄:" << max_age << endl;
cout << "最小年龄:" << min_age << endl;
return 0;
}
```
阅读全文