2013-10-24 44 views
-2

我在写一个递归二进制搜索程序。这是迄今为止我所拥有的。这个程序的参数是它包含2个函数,主函数和第二个函数,它们将对它传递的值进行二进制排序。该项目工程,但它不递归搜索功能,我不认为它使用二进制搜索...提高我的二进制搜索程序为递归的吗?

/* ex06_18.c */ 
#include <stdio.h> 
#define SIZE 10 

/* function prototype */ 
void someFunction(const int b[], int startIndex, int size); 

/* function main begins program execution */ 
int main(void) 
{ 
int a[ SIZE ] = { 8, 3, 1, 2, 6, 0, 9, 7, 4, 5 }; /* initialize a */ 
printf("Answer is:\n"); 
someFunction(a, 0, SIZE); 
printf("\n"); 
return 0; /* indicates successful termination */ 
} 
void someFunction(const int b[], int startIndex, int size) 
{ 
if (startIndex < size) { 
someFunction(b, startIndex + 1, size); 
printf("%d ", b[ startIndex ]); 
} /* end if */ 
} /* end function someFunction */ 
+2

“该项目工程” - 除非你有一个完全不同的概念,“搜索”比其他人。 “它不会递归地搜索函数” - 仅仅因为它不搜索;它显然是递归的。 “我不认为它使用二分搜索” - 你不觉得?你是否在课堂上跳过讨论,没有阅读关于该主题的教科书?即使如此,通过谷歌提供的引用googol。 “二进制排序” - 等待,现在你想排序?排序,搜索和打印出所有的值都是三种不同的东西。 –

回答

0

你正在做的只是打印阵列向后什么,不是吗?您可以在http://en.wikipedia.org/wiki/Binary_search_algorithm中阅读二进制搜索算法。我没有看到任何理由,你说它必须是一个递归函数。我更喜欢二元搜索的非递归函数,即使在维基百科链接中也有递归方法。

0

二进制搜索只如果你的数据集进行排序工作;否则,小于和大于比较是完全无用的,因为它们没有告诉你任何其他元素的位置。所以首先你需要确保你的数据集被排序 - 这是一个单独的问题。

一旦你有一个排序的数据集,你要拿出遵循这个一般形式的函数(伪代码,而不是实际的C++):

function search(needle, haystack, start, end) { 
    int middle_idx = haystack[(start+end)/2] 
    if(haystack[middle_idx] == needle) 
     return middle_idx; 
    else if(haystack[middle_idx] < needle) 
     return search(needle, haystack, start, middle_idx-1) 
    else if(haystack[middle_idx] > needle) 
     return search(needle, haystack, middle_idx+1, end) 

确保您处理任何边缘案件弹出。特别是,想想如果针没有在干草堆中找到,会发生什么;你能添加一些处理这种情况的东西吗?