【发布时间】:2017-08-18 22:50:15
【问题描述】:
我必须使用分治法找到数组中元素的最小值和最大值。我已经编写了一个代码,但它不适用于数组中超过 6 个元素。不知道是什么问题
#include<iostream>
using namespace std;
int minimum=999,maximum,mi,ma;
void result(int mi,int ma)
{
if(maximum<ma)
{
maximum=ma;
}
if(minimum>mi)
{
minimum=mi;
}
}
void maxmin(int arr[],int i,int j)
{
cout<<" i ="<<i<<" j= "<<j<<endl;
if(i==j)
{
mi=ma=arr[i];
result(mi,ma);
}
else if(i==j-1)
{
if(arr[i]>arr[j])
{
ma=arr[i];
mi=arr[j];
}
else
{
mi=arr[i];
ma=arr[j];
}
result(mi,ma);
}
else
{
int mid=i+j/2;
maxmin(arr,i,mid);
maxmin(arr,mid+1,j);
}
}
int main()
{
int arr[10],n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
maxmin(arr,0,n-1);
cout<<" max "<<maximum<<" min "<<minimum<<endl;
return 0;
}
【问题讨论】:
-
你试过使用调试器吗?
-
您要对数组进行排序还是只查找最大值和最小值?
-
起初
int mid=i+j/2;不正确。可能你想写int mid=(i+j)/2; -
为什么要使用分而治之的方式来找到最大值和最小值?如果数组已排序,因此您无需查找它们,它们是数组中的第一个和最后一个
-
您通常应该避免使用全局变量。更重要的是永远不要使用未初始化的变量。当然,这两个 cmets 都与
int minimum=999,maximum,mi,ma;相关,它们是全局变量,maximum未初始化使用。
标签: c++ arrays divide-and-conquer