gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:35:57 24 4
gpt4 key购买 nike

假设我们想用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com