c - C中的递归未排序数组搜索算法?

标签 c arrays algorithm recursion divide-and-conquer

假设我们想用 C 语言编写一个函数,用于在未排序的整数数组中查找指定的目标值。一般来说,这很简单,运行时间为 O(n):

int search(int *data, int len, int target)
{
    int i;
    for(i = 0; i < len; i++)
        if(data[i]==target) return i;
    return -1;
}

假设我们是受虐狂,想用分而治之的算法来解决这个问题。我们会在递归部分遇到麻烦,因为我们不能每次都排除一半的数组,就像我们可以使用二进制搜索一样:

int search(int *data, int start, int stop, int target)
{
// Base case: we've divided the array into two size subarray
    if(stop==start+1)
{
    if(data[start]==target) return start;
    if(data[stop]==target) return stop;
    return -1;
}
/* The recursion part is tricky.  
    We *need* to parse both halves of the array, because we can't safely
    exclude any part of the array; it's not sorted, so we can't predict
    which half it's going to be in.*/
else
{
    /** This obviously doesn't work. */
    int mid = (stop-start)/2;
    return search(data, start, mid, target);
    return search(data, mid+1, stop, target);
}
}

有什么方法可以让它工作吗?

注意:这不是要求别人为我做作业,正如你们中的一些人在阅读这个问题时可能会想的那样。然而,这是我在尝试解决本周早些时候提交的作业中的一个问题时遇到这个问题后的好奇心启发的。

最佳答案

如何将递归调用更改为:

else
{
    int mid = (stop-start)/2;
    int x = search(data, start, mid, target);
    if (x == -1)
        return search(data, mid+1, stop, target);
    else 
        return x;
}

关于c - C中的递归未排序数组搜索算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831719/

相关文章:

c - 更好地替代 C 中的 exit()、atexit()

c - Rebol 3 扩展和 "handles"

php - PHP 回调可以通过引用接受它的参数吗?

c++ - 如何命令坐标对?

algorithm - 在通用哈希表中查找项目?

c - EOF 之前没有换行符吗?

c - wget 命令将输入​​作为文件,并且文件必须包含 url 和字符串参数

python - 当传递给 "numpy.array"时,生成器不工作是一个错误吗?

c - 这是如何清理数组中的空白空间的?

c++ - 是四舍五入进行float-double比较的正确方法