2016-12-24 45 views
0
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) 

我不能使用額外的參數我mut只使用self和number。我想讓它遞歸,但如果它很難,你可以正常回答。 此代碼工作良好,直到數字4.當我給4搜索它說,它是在地方2,它繼續說4兩個。我已經嘗試添加其他數字,但它是相同的Python二進制搜索如果可能遞歸

回答

0

只是一個提示:你如果您給他們默認值可以使用額外的參數。你的方法簽名是這樣的:

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

所以它仍然可以被稱爲像sorted.binarySearch(5),但會在內部能夠正確地傳遞的狀態。

+0

它是一個homewrok這樣我就可以不要那樣做:( –

+0

那麼,其他參數只是在內部使用,您還將如何傳輸狀態?全局變量? – fafl

1

的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

+0

İt是一個homewrok,所以我不能這樣做:(我必須自己寫這個算法 –