通过分而治算法计算数组的最大数量
Calculating the maximum number of an array by divide and conquer algorithm
我做了一个程序,使用分而治算法计算数组的最大值,但输出是0。
#include <iostream>
using namespace std;
int array[50];
void maximum(int index1, int index2, int&max_number) {
int max_number1;
int max_number2;
int half;
if (index1 == index2)
max_number = array[index1];
else {
half = (index1 + index2) / 2;
maximum(index1, half, max_number1);
maximum(half + 1, index2, max_number2);
if(max_number1 < max_number2)
max_number = max_number2;
else
max_number = max_number1;
}
}
int main() {
int index1;
int index2;
int max_number = 0;
cout << "index2 = ";
cin >> index2;
for (index1 = 0; index1 < index2; index1++)
cin >> array[index1];
maximum(index1, index2, max_number);
cout << "maximum number = " << max_number;
return 0;
}
我该怎么办?
在此循环之后
for(index1 = 0; index1 < index2; index1++)
cin>>array[index1];
index1
等于 index2
.所以这个电话
maximum(index1, index2, max_number);
没有意义。
在任何情况下,该函数都太复杂了,并且使用全局变量,这是编程的不良做法。
递归函数可以使用标准算法编写得更简单std::max
。
例如
#include <iostream>
#include <algorithm>
size_t maximum( const int a[], size_t n )
{
return n < 2 ?
0 :
std::max( maximum( a, n / 2 ),
n / 2 + maximum( a + n / 2, n - n / 2 ),
[a] ( size_t i, size_t j ) { return a[i] < a[j]; } );
}
int main()
{
const size_t N = 10;
int a[N] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int b[N] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
int c[N] = { 0, 2, 4, 6, 8, 9, 7, 5, 3, 1 };
size_t pos = maximum( a, N );
std::cout << "The maximum element is " << a[pos]
<< " at position " << pos << std::endl;
pos = maximum( b, N );
std::cout << "The maximum element is " << b[pos]
<< " at position " << pos << std::endl;
pos = maximum( c, N );
std::cout << "The maximum element is " << c[pos]
<< " at position " << pos << std::endl;
return 0;
}
程序输出为
The maximum element is 9 at position 9
The maximum element is 9 at position 0
The maximum element is 9 at position 5
这部分代码中有拼写错误
for(index1 = 0; index1 < index2; index1++)
索引 1 将增加到索引 2,然后
maximum(index1, index2, max_number);
将在第一个/第二个参数中传递相同的相同值,您可以像
for(index1 = 0; index1 < index2; index1++)
cin>>array[index1];
index1 = 0;
maximum(index1, index2, max_number);
相关文章:
- 使用指针从C++中的数组中获取最大值
- 使用递归的数组的最小值.这是怎么回事
- 复制几乎为空的数组的最快方法
- 通过JNI传递数据数组的最快方法是什么
- 数组中最大的非重复元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 在二维数组中查找最小值和最大值?
- 遍历并行数组以确定C++中的最大数字
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何在数组中找到最小编号的索引号?
- 如何在数组中交换最小和最大的位置?
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 在二维向量或数组中可以存储的最大元素数是多少?
- 为什么使用数组元素查找最大数字的程序不起作用?
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- C++ rezing 动态数组最多可以处理一定数量的元素,但在某些时候会崩溃并显示错误 (0XC0000005)
- 堆栈或BSS或DATA段上的数组最大大小
- 如何找到数组中的最大数并用c++显示
- 确定strftime字符数组最大大小的智能方法是什么?