정렬된 목록에서 검색할 데이터 값을 검색 범위의 중간 요소 값과 비교할 때 다음 세 가지 상황이 발생합니다.
1) 찾으려는 데이터 값이 중간 요소 값과 정확히 일치하는 경우 중간 요소 값의 인덱스를 반환합니다.
2) 검색할 데이터의 값이 중간 요소 값보다 작은 경우 전체 검색 범위의 전반부를 새로운 검색 범위로 사용하고, 1) 동일한 값이 나올 때까지 실행됩니다. 설립하다.
3) 검색할 데이터의 값이 중간 요소의 값보다 큰 경우 전체 검색 범위 중 후반부를 새로운 검색 범위로 사용하고, 1) 동일한 값이 나올 때까지 실행됩니다. 발견되었습니다
4) 결국 동일한 값이 발견되지 않으면 오류 메시지가 반환됩니다.
이진 트리로 이해: 가운데 값은 이진 트리의 루트, 전반부는 왼쪽 하위 트리, 후반부는 오른쪽 하위 트리입니다. 절반 검색 방법의 검색 횟수는 정확히 값이 위치한 수준의 수입니다. 등확률 조건에서 대략
//Data는 검색할 배열, x는 검색할 데이터 값, beg는 검색 범위의 시작, last는 검색 범위의 끝
//비재귀적 방법
int BiSearch(int data[], const int x, int beg, int last)
{
int mid;//중간 위치
(구걸 > 마지막)
{
반환 -1
}
동안(구걸 <= 마지막)
{
mid = (마지막으로 요청) / 2;
If (x == 데이터[mid] )
~
반납
~
else if (data[mid] < x)
~
구걸 = 중간 1;
~
else if (data[mid] > x)
~
마지막 = 중간 - 1
~
}
반환 -1
}
//재귀적 방법
int IterBiSearch(int data[], const int x, int beg, int last)
{
int mid = -1;
mid = (마지막으로 요청) / 2;
If (x == 데이터[mid])
{
반납
}
else if (x < 데이터[중간])
{
return IterBiSearch(data, x, beg, mid - 1)
}
else if (x > 데이터[mid])
{
return IterBiSearch(데이터, x, 중간 1, 마지막);
}
반환 -1
}
//주요 함수
int _tmain(int argc, _TCHAR* argv[])
{
int data1[60] = {0};
int no2search = 45
cout << "배열은 다음과 같습니다. " <<
int siz = sizeof(data1)/sizeof(int)
for (int i = 0; i < siz; i )
{
data1[i] = i;
cout << data1[i] << "
}
cout
정수 인덱스 = -1;
//인덱스 = BiSearch(data1, no2search, 0, siz)
인덱스 = IterBiSearch(data1, no2search, 0, siz)
cout << "의 인덱스" << index
Getchar()
0을 반환합니다.
}
/**
* 배열에서 문자의 위치를 반씩 찾습니다(정렬된 목록)
* @param array 검색된 배열
* @param x
검색할 문자
* @returns 배열에서 문자의 위치를 찾을 수 없으면 -1을 반환합니다.
*/
함수 바이너리 검색(배열,x){
var lowPoint=1;
var higPoint=array.length;
var returnValue=-1;
var midPoint;
var 발견=false;
while ((lowPoint<=higPoint)&&(!found)){
midPoint=Math.ceil((lowPoint higPoint)/2);
//console.log(lowPoint "====" midPoint "====" higPoint);
if(x>배열[midPoint-1]){
lowPoint=midPoint 1;
}
else if(x
higPoint= midPoint-1;
}
else if(x=배열[midPoint-1]){
발견=true;
}
}
if(발견){
returnValue=midPoint;
}
returnValue;
}
/*var array2=[1,2,3,4,5,6,7,8,9,100,109];*/
var array2=['a','b','c','d','e','f','g'];
console.log(binarySearch(array2,'c'));