//이진 검색의 잊어버린 재귀 버전
함수 bin_search(arr, target,low,high){
if(low var min=(low high)/2
if(target>arr[ min])
return binary_search(arr,target,min 1,high);
else
return binary_search(arr,target,low,min)
}else if(low==high) { //한 개의 요소만 남았습니다
if(arr[low]==target)
return low
else return
}else if(low>high); 비어 있음, arr의 초기 최고값을 계산할 때 arr .length-1을 고려해야 합니다.
return -1>}
}
var arr=[1,2; ,3,4, 5,6];
alert(binary_search(arr,3,0,arr.length-1))
밤에 데이터 구조를 살펴보니 js로 바이너리 검색 알고리즘을 작성했습니다. (코드는 위와 같습니다) 그리고 나서 테스트 데이터로 무작위로 배열을 작성해 봤습니다.(위와 같습니다.) 생각대로 검색 대상의 첨자를 출력해야 하는데 예상치 못한 일이 발생했습니다. 약 2초가 지나면 브라우저가 자동으로 스크립트 실행을 종료하고 한동안 의아함을 느꼈습니다.
경험에 따르면 스크립트를 실행하는 과정에서 무한 루프가 발생해야 합니다. 자가 학습 중에 알고리즘을 살펴보니 문제가 없었습니다. (교과서에 따라 코드를 직접 입력하면 됩니다. 당신은 틀리지 않을 것입니다) 그러나 문제는 남아 있습니다. 그래서 1차 판단 조건에 다음과 같은 출력문을 추가했습니다.
//이진 검색 건망증 재귀 버전 function binary_search(arr,target,low,high){
if(low var min=(low high )/2;
if(target>arr[min])
return binary_search(arr,target,min 1,high)
else
return binary_search(arr,target,low,min) ) ;
}else if(low==high){ //하나의 요소만 남음
if(arr[low]==target)
return low
else return -1; >}else if(low>high){ //비어 있음, arr.length-1을 사용하여 arr의 초기 최고값을 계산할 때 고려해야 합니다.
return -1;
실행하면 2.5라는 숫자가 나오는 다이얼로그가 뜹니다~~ 갑자기 컴퓨터를 부수고 싶은 충동이 듭니다.
오류 원인 및 요약:
JavaScript의 "/" 연산자는 C의 "/" 연산자와 다릅니다. 후자는 자동으로 반올림되지만 전자는 그렇지 않은 경우 소수점을 얻습니다. 정수로 나눕니다(예: 5/2=2.5).
해결책:
(1)var min=parseInt((low high)/2);
(2)var min=Match.floor((low high)/2);