如果可能的话,Python二进制搜索是递归的

时间:2016-12-24 21:22:23

标签: python search recursion binary-search

    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之后说两个。我试过添加其他数字但它是相同的

2 个答案:

答案 0 :(得分:2)

Python 已经有一个很棒的模块bisect,它对排序列表执行二进制搜索:

import bisect

l = [2,3,1,5,6,7,9,8,4]

print(bisect.bisect(l, 4))   # Output: 3

熟悉这个库:

https://docs.python.org/3.5/library/bisect.html

答案 1 :(得分:0)

只是提示:如果您为其指定默认值,则可以使用其他参数。您的方法签名如下所示:

def binarSearch(self, number, start=0, end=len(self.theList)):

所以它仍然可以像sorted.binarySearch(5)一样调用,但内部能够正确传递状态。