안녕하세요 :) 저는 정렬 된 목록을 통해 이진 검색을 사용하는 프로그램을 작성했습니다. 다음과 같이 작동합니다 : 그것은 1 2에있는 경우 프로그램이 숫자 3을 찾아야한다 3 1 2 3Python 3 바이너리 검색 정렬 된 변수 (숫자 목록)
파이썬 find.py 1 2 3
그것은 사실 및 인쇄 발견 바늘을 반환해야 3, false를 돌려 인쇄가 발견되지 않은 경우는 1 2 및 3에없는 경우는 ....
def binary_search(needle, haystack):
first = 0
last = len(haystack) - 1
itemlist = str(input(haystack))
sorted(itemlist)
while first <= last:
mid = (first + last)/2
if itemlist[mid] == needle :
print("Found the needle in the haystack")
return True
elif needle < itemlist[mid]:
last = mid - 1
else:
first = mid + 1
if not True:
print("Did not find the needle in the haystack")
return False
그래서 표준 바이너리 서치 알고리즘을 구현했지만, 내가 건너 온 모든 버전은하지 않습니다 다음 숫자를 모두 검색해야하는 항목으로 첫 번째 숫자를 가져 오십시오. 내 질문은, 어떻게해야합니까? 첫 번째 변수를 "항목"으로 지정한 다음 항목을 포함 할 수도 있고 포함하지 않을 수도있는 목록으로 모든 것을 가져올 수 있습니까?
또한 x 길이의 목록을 정렬해야하므로 정렬 된 함수를 시도했지만 목록 길이가 될 수 있으므로 변수를 정렬해야합니까? 나는 거기에 조금 붙어있어 ....이 주제에 대한 도움말?
안녕하세요, 답장을 보내 주셔서 감사합니다. 그러나 여기에 많은 도움을주었습니다. typeError : 목록 인덱스는 부동 소수점이어야하며 부동 소수점이어야합니다. –
오류는 행과 관련이 있습니다. binary_search (int (needle), sorted haystack [mid] == needle : –
@mhawke timsort (Python의 기본 정렬 알고리즘)에는 O (n log n) 복잡도 _ 최악의 경우에만 _ 만 켜져 있습니다. 이미 정렬 된 데이터는 선형입니다. –