class SortedList:
theList = []
def add(self, number):
self.theList.append(number)
return self.theList
def remove(self, number):
self.theList.remove(number)
return self.theList
def printList(self):
return print(self.theList)
def binarSearch(self, number):
middle = (len(self.theList)//2)
end = len(self.theList)
if end != 0:
if int(self.theList[middle]) == int(number):
return print("The number is found in the list at place",middle+1)
elif int(self.theList[middle]) < int(number):
self.theList = self.theList[middle:]
return self.binarSearch(number)
elif int(self.theList[middle]) > int(number):
self.theList = self.theList[:middle]
return self.binarSearch(number)
else:
return print("The list is empty")
sorted = SortedList() #create a SortedList object
sorted.add("1")
sorted.add("2")
sorted.add("3")
sorted.add("4")
sorted.add("5")
sorted.add("6")
sorted.printList()
sorted.binarSearch(3)
我不能使用额外的参数我只使用self和数字。我想让它递归,但如果它很难你可以正常回答。 这个代码工作得很好,直到4号。当我给4进行搜索它说它已经到位2并继续在4之后说两个。我试过添加其他数字但它是相同的
答案 0 :(得分:2)
Python 已经有一个很棒的模块bisect
,它对排序列表执行二进制搜索:
import bisect
l = [2,3,1,5,6,7,9,8,4]
print(bisect.bisect(l, 4)) # Output: 3
熟悉这个库:
答案 1 :(得分:0)
只是提示:如果您为其指定默认值,则可以使用其他参数。您的方法签名如下所示:
def binarSearch(self, number, start=0, end=len(self.theList)):
所以它仍然可以像sorted.binarySearch(5)
一样调用,但内部能够正确传递状态。