Ezr*_*3zr 4 c recursion binary-search
好的,所以我给了这个功能
int bin(int value, int size, int array[])
Run Code Online (Sandbox Code Playgroud)
我应该在"array []"中找到"value",但是这里的问题在于,在大多数情况下,我们有类似的东西.
int bin(int value, int max, int min, int array[])
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,这部分的递归要容易得多,因为我仍然可以传递我所在的数字,以及记住数组的大小.
int bin(int array[], int value, int min, int max)
{
if(max < min)
return -1;
else
{
int mid = min + (max - min)/2;
if(array[mid] > value)
return bin(array, value, min, mid-1);
else if(array[mid] < value)
return bin(array, value, mid+1, max);
else
return mid;
}
Run Code Online (Sandbox Code Playgroud)
但由于我只能传递1个整数,我究竟会如何调整这个算法呢?从本质上讲,我只能做这样的事情,但我知道它在逻辑上不会起作用.有没有办法,我可以看到数组的大小?我尝试过,但数字没有正确处理.
int bin(int array[], int value, int size)
{
int mid = size/2;
if(array[mid] > value)
return bin(array, value, size-(size/2));
else if(array[mid] < value)
return bin(array, value, size+(size/2));
else
return mid;
}
Run Code Online (Sandbox Code Playgroud)
tbe*_*ert 13
您还需要明确传递基数:
int
bin(int array[], int value, int size)
{
int mid = size/2;
if(array[mid] > value)
return bin(array, value, size/2);
else if(array[mid] < value)
return bin(&array[mid], value, size/2);
else
return mid;
}
Run Code Online (Sandbox Code Playgroud)
请注意"if(array [mid] <value)"情况下的"&array [mid]"
每次,使用base + offset副最小值/最大值索引,您可以搜索正确的一半数组