繁体   English   中英

使用分治算法从给定数组中找到最小值和最大值

[英]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计算等多个逻辑错误。 当您可以直接使用minmax变量时,为什么还需要arrr[2] or [2000]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM