我是编程的新手,我正在学习C.我试图通过使用递归来解决问题。我已经找到了很多有关它的信息,我可以在我的程序中使用它,但我仍然想尝试不同的东西。我的问题如下:我有
bool search(int value, int values[], int n)
// int value is value to search,
// int values[] is the array in which value is to be found (or not)
// int n is size of array
// some code here and then:
if (middle_number > value)
{
int new_array[] = values[0:middle_index];
// I want my new array to be some slice of values[]
// by declaring a range from 0 to the middle_index
// Is that possible?
search(value, new_array, middle_index);
// Using recursion
}
我可以循环创建新数组,但是,我想,我会失去二分搜索的优势(更好的性能)
答案 0 :(得分:0)
C语言不支持整数数组的直接数组切片功能 要实现二进制搜索,您可以传递数组索引以指示要使用的数组部分。
bool search(int value, int values[], int low, int high)
其中low是较低的索引而high是较高的数组索引,用于函数代码。你甚至可以创建int values []作为全局变量,然后使用搜索函数,
bool search(int value,int low, int high)
你可以浏览网络,你将使用这种方法获得二进制搜索实现,因为它是实现二进制搜索的常用方法。
答案 1 :(得分:0)
在C中,对于给定的问题,您使用指针算法完全绕过问题(不需要数组的副本;您只需在数组的有限部分中搜索,就好像它是部分的副本一样数组):
if (middle_number > value)
return search(value, array + middle_index, n - middle_index);
可能会对参数列表(±1种类)进行一些调整,但概念是您将中间元素的地址和数组顶部的大小传递给递归调用。
合理的调整(因为你知道array[middle_index] != value
):
if (middle_number > value)
return search(value, array + middle_index + 1, n - middle_index - 1);