[英]To find minimum and maximum value from a given array using divide and conquer algorithm
#include<stdio.h>
static int min,max=0,arrr[100],mid,n;
minmax(int arr[],int low,int high)
{int i;
if(high-low==1)//for n==2
{
if(arr[low]<arr[high])
{
min=arr[low];
max=arr[high];
arrr[0]=min;
arrr[1]=max;
}
else
{
min=arr[high];
max=arr[low];
arrr[0]=min;
arrr[1]=max;
}
return 0;
}
if(n==1)//n==1
{
arrr[0]=arr[high];
arrr[1]=arr[high];
return 0;
}
mid=low+high/2;
if(high-low>1)
{
mid=low+high/2;
minmax(arr,low,mid);
minmax(arr,mid+1,high);
}
}
int main()
{
int i,j,sum=0,low,high;
printf("Enter the number of elements: ");
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++)
{
printf("Enter the element %d: ",i);
scanf("%d",&arr[i]);
}
low=0;//starting value of array
high=n-1;//final value
minmax(arr,low,high);
printf("\n\nMinimum element %d \n\nMaximum element %d ",arrr[0],arrr[1]);
}
对于前两种情况,我得到了正确的答案,即当 n 等于 1 且 n 等于 2 时。但是对于 n 大于 2 的第三种情况,我得到输入的前两个值作为最小值和最大值. arrr 是存储最小值和最大值的输出数组。
#include<stdio.h>
static int min=10000,max=-10000,arrr[2],mid,n;
int minmax(int arr[],int low,int high)
{
if(high-low==1)//for n==2
{
if(arr[low]<arr[high])
{
if(min>arr[low]){
min=arr[low];
}
if(max<arr[high]){
max=arr[high];
}
arrr[0]=min;
arrr[1]=max;
}
else
{
if(min>arr[high]){
min=arr[high];
}
if(max<arr[low]){
max=arr[low];
}
arrr[0]=min;
arrr[1]=max;
}
return 0;
}
if(high-low==0)//n==1
{
if(min>arr[high]){
min=arr[high];
}
if(max<arr[low]){
max=arr[low];
}
arrr[0]=min;
arrr[1]=max;
return 0;
}
if(high-low>1)
{
mid=(low+high)/2;
minmax(arr,low,mid);
minmax(arr,mid+1,high);
}
}
int main()
{
int i,j,sum=0,low,high;
printf("Enter the number of elements: ");
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++)
{
printf("Enter the element %d: ",i);
scanf("%d",&arr[i]);
}
low=0;//starting value of array
high=n-1;//final value
minmax(arr,low,high);
printf("\n\nMinimum element %d \n\nMaximum element %d ",arrr[0],arrr[1]);
}
您发布的不是“分而治之”,而是“分而治之”。
不打算说它只是一个草稿,其中包含两次mid
计算等多个逻辑错误。 当您可以直接使用min
和max
变量时,为什么还需要arrr[2] or [2000]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.