分而治之 - 返回一个数组

时间:2017-08-18 08:14:51

标签: c arrays algorithm sorting divide-and-conquer

我最近通过分而治之算法。

如果返回值假设为某个整数,我能够解决问题。

实施例:1。二进制搜索,这里我只需要返回1,否则为-1。

例:2。数组中的最大数量,只需要返回一个数字。

但是当涉及到返回一个数组时,比如当我们需要整个数组作为输出时(例如:排序)。

我觉得很难。

任何人都可以帮助采用最佳方法吗?

以下是我的二进制搜索方法。

#include<stdio.h>
char* Divide(int arr[],int l,int r,int key)
{
    int m=(l+r)/2;
    if(l==r)
    {
        if(key==arr[m])
            return "Found";
        else
            return "Not Found";
    }
    else
    {
        if(key==arr[m])
            return "Found";
        else if(key>arr[m])
            Divide(arr,m+1,r,key);
        else
            Divide(arr,l,m,key);
    }
}
int main()
{
    int arr[]={1,2,3,4,5,6,7,8};
    int n=sizeof(arr)/sizeof(arr[0]);
    char* result=Divide(arr,0,n-1,10);
    printf("%s\n",result);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

你必须在递归调用中返回值try

#include<stdio.h>
char* Divide(int arr[],int l,int r,int key)
{
    int m=(l+r)/2;
    if(l==r)
    {
        if(key==arr[m])
            return "Found";
        else
            return "Not Found";
    }
    else
    {
        if(key==arr[m])
            return "Found";
        else if(key>arr[m])
            return Divide(arr,m+1,r,key); // just returning values here
        else
            return Divide(arr,l,m,key); // and here would make it work
    }
}
int main()
{
    int arr[]={1,2,3,4,5,6,7,8};
    int n=sizeof(arr)/sizeof(arr[0]);
    char* result=Divide(arr,0,n-1,10);
    printf("%s\n",result);
    return 0;
}

查看online compiler

上的演示