在C中从另一个切片创建一个新数组

时间:2014-03-12 16:12:34

标签: c arrays search binary

我是编程的新手,我正在学习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 
       }

我可以循环创建新数组,但是,我想,我会失去二分搜索的优势(更好的性能)

2 个答案:

答案 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);