2011-03-24 4 views
1

bsearch는 직접 검색에 매우 적합하지만 예제 검색 범위가 필요한 경우 어떻게 사용해야합니까?bsearch 및 검색 범위?

업데이트

예컨대 난 및 b (a> = X < b) 사이의 범위의 값을 찾을 경우.

업데이트

범위 값이 동일하지 않은 수있다. 그래서 만약 내가 배열 (10,20,30)을 가지고 "15"를 찾으려고하는데, 가장 가까운 최소 범위에 주소 (포인터)를 가져오고 싶다.이 예제에서는 this (range) (10,20)

+2

아니요, 나는 그 자체로 말하고 있지 않습니다. 질문을 자세히 설명해 주시겠습니까? –

+0

죄송합니다. 예를 들어 a와 b 사이의 값 범위를 찾고 싶다면 (a> = x excanoe

답변

1

bsearch 매개 변수 중 하나는 검색 할 요소 수입니다. 그래서 대신에, 예를 들어, 100, '내가 할 거라고하는 수동 (의미 I입니다 업데이트

후 ... 그것은 42에서 검색

bsearch("foo", data, /*100*/42, sizeof *data, cmpfx); 

을 d) 이진 검색을 작성하십시오.

아이디어는 (나머지) 배열의 가운데 요소를 상한 및 하한 모두 비교하는 것입니다. 크기가 작 으면 작은 하프에서 다시 하한 검색을합니다. 큰 반쪽에서 다시 상한 검색보다 큰 경우; 그렇지 않으면 범위 내의 요소를 찾았습니다. 제 2 회 갱신 당신은 포인터의 쌍을 반환 할


?

구조체 안에 포장하거나 함수의 포인터 주소를 전달해야합니다.

하지만 이제는 더 간단한 검색을 수행 할 수 있습니다. 값을 찾을 때까지 검색하고 길이가 0 인 범위를 반환하거나 실패 할 때까지 검색하십시오. 범위는 마지막으로 살펴본 배열 값과 실패한 상황에 대한 정확한 위치에 따라 측면 중 하나에 값을 지정하거나 배열의 끝에있는 경우 비어 있습니다.

1

bsearch() 함수는 일부 조건과 일치하는 단일 요소를 찾도록 설계되었습니다. 맨 페이지에 따르면 :

RETURN VALUE 
     The bsearch() function returns a pointer to a matching member of the 
     array, or NULL if no match is found. If there are multiple elements 
     that match the key, the element returned is unspecified. 

키와 일치하는 요소가 여러 개인 경우 반환되는 요소가 지정되지 않은 것입니다. 그래서 당신은 당신이 얻는 요소가 범위의 중간에 처음, 마지막, 어딘가에 있는지 모른다.

A와 B 사이의 배열 요소를 찾고 요구 사항을 변경할 수 있고 배열에 정확히 하나의 A와 정확히 하나의 B가 있음을 보장 할 수 있으면 요구 사항을 먼저 검색 할 수 있습니다 A를 검색 한 다음 B를 검색하십시오.

start = bsearch(A, array, N, sizeof(*array), compare); 
end = bsearch(B, array, N, sizeof(*array), compare); 

아마도 당신이 원하는 것을 정확히 수행하기 위해 자신의 함수를 작성해야 할 것입니다.