2013-10-24 6 views
-2

재귀적인 이진 검색 프로그램을 작성하고 있습니다. 여기에 내가 지금까지 가지고있는 것이있다. 이 프로그램의 매개 변수는 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

"프로그램이 작동합니다"- 다른 사람보다 "검색"이라는 근본적으로 다른 개념이 없으면 않습니다. "함수를 재귀 적으로 검색하지 않습니다"- 검색하지 않기 때문에; 그것은 명백하게 재귀 적입니다. "이진 검색을 사용한다고 생각하지 않습니다."- 생각하지 않습니까? 수업에서 토론을 건너 뛰고 해당 주제에 대한 교과서를 읽지 않으셨습니까? 그래도 Google을 통해 참조 할 수있는 googol이 있습니다. "이진 정렬"- 잠깐, 이제 정렬하고 싶습니까? 정렬, 검색 및 모든 값을 인쇄하는 것은 세 가지 다른 작업입니다. –

답변

0

당신이 단지 뒤쪽으로 배열을 인쇄하고 뭐, 아니지만 ...이 프로그램은 작동하지만, 재귀 적 기능을 검색하지 않습니다와 나는 그것이 이진 검색을 사용하여 생각하지 않아? 이진 검색 알고리즘은 http://en.wikipedia.org/wiki/Binary_search_algorithm에서 읽을 수 있습니다. 왜 당신이 "재귀 함수"가되어야한다고 말하는지 나는 전혀 알지 못합니다. 위키 피 디아 링크에서도 재귀 적 접근법을 사용하고 있지만 이진 탐색의 비 재귀 함수를 선호합니다.

0

이진 검색은 데이터 집합이 정렬 된 경우에만 작동합니다. 그렇지 않으면 less-than 및 greater-than 비교는 다른 요소가 어디에 있는지에 대해 알려주지 않기 때문에 완전히 쓸모가 없습니다. 먼저 데이터 세트를 정렬해야합니다. 이는 별개의 문제입니다.

당신은 정렬 된 데이터 세트, 당신이 일반적인 형태를 다음과 함수 (의사가 아닌 실제 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) 

당신은 어떤 가장자리 케이스를 처리해야합니다 그 팝업. 특히 바늘이 건초 더미에서 발견되지 않으면 어떻게되는지 생각해보십시오. 이 사건을 다루는 무언가를 추가 할 수 있습니까?

관련 문제