【发布时间】:2018-01-26 20:29:22
【问题描述】:
我最近正在研究分而治之算法。
如果返回值假设为某个整数,我就能解决问题。
例如: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;
}
【问题讨论】:
-
您对
Divide的递归调用不会返回任何内容。这会导致未定义的行为。 -
另外,请花一些时间到read about how to ask good questions。您的问题缺乏信息,例如您显示的代码有什么问题?我还建议您阅读 Eric Lippert 的 How to debug small programs,并学习如何使用调试器。
-
函数结束时隐式返回,所以是否需要调用return指令。
-
如果你声明一个函数返回一个值(即它的返回不是
void),你必须显式返回具有正确类型的东西,否则你将拥有undefined behavior,这会使你的整个程序格式错误且无效。
标签: c arrays algorithm sorting divide-and-conquer