2012-03-29 4 views
2

이 코드를보고하십시오 : 이진 검색은

def chop(array, search): 
     lo = 0 
     high = len(array) - 1 
     while lo <= high: 
       mid = (high + lo) /2 
       if array[mid] == search: 
         return 'true' 
       elif search > array[mid]: 
         low = mid + 1 
       else: 
         high = mid - 1 
     return 'false' 



if __name__ == '__main__': 
     a = [1,2,3,4,5,6,7,8,9,10] 
     print chop(a, 3) 

나는 배열에 번호를 검색하도록되어이 작은 스크립트 작성 - 일반 이진 검색을. 그래서 저는 스크립트를 실행합니다. 예를 들어 chop(a, 1)을 넣을 때, 나는 넣습니다. 실제로는 chop(a, 2)을 넣었습니다. chop(a, 3)을 입력하면 파이썬 쉘에서 빈 줄이 생깁니다.

아무도 무슨 일이 일어나고 있는지 아이디어가 있습니까?

low = mid + 1 

귀하의 while 루프 변수 lo 사용하고, 당신은 당신의 while 루프 내에서 low라는 새 변수를 정의하고 있습니다 :이 같은데요

+6

''사실 ''거짓 ''입니까? ['True' 및'False' (http://docs.python.org/library/stdtypes.html#boolean-values)는 어떻습니까? – huon

+0

mid = 1 일 때 이진 검색이 지연됩니다. 루프 내에서 mid 값을 인쇄 해보십시오. –

+2

bisect 모듈에 비슷한 기능이 있습니다. –

답변

12

은 버그입니다. 본질적으로 사용자는 lo 변수를 업데이트하지 않습니다. 에 라인

변경 :

lo = mid + 1 

과 알고리즘이 작동합니다.

+0

그게 전부입니다. 나는 그것을 알지 못했다고 나는 믿을 수 없다! 감사합니다 –

+2

우리 중 가장 좋은 일이 :) 걱정하지 마십시오 –

+0

아, 이것이 왜 내가 파이썬의 선언을 좋아하지 않는 이유입니다. 놓치기 쉽다. – nawfal

관련 문제