2016-11-13 79 views
0

使用二進制搜索功能的索引值我被任務是設計一個返回給定目錄內的給定項目的索引Python函數。它被稱爲binary_sort(l,item),其中l是一個列表(未分類或排序),item是您正在尋找索引的項目。排序爲蟒蛇

這裏就是我有這麼遠,但它只能處理有序列表

def binary_search(l, item, issorted=False): 

templist = list(l) 
templist.sort() 

if l == templist: 
    issorted = True 

i = 0 
j = len(l)-1 

if item in l: 

    while i != j + 1: 
     m = (i + j)//2 
     if l[m] < item: 
      i = m + 1 

     else: 
      j = m - 1 

    if 0 <= i < len(l) and l[i] == item: 
     return(i) 
else: 
    return(None) 

我如何,如果它被賦予一個未排序列表修改此所以它會返回一個未排序列表中值的索引和一個值作爲參數?

+0

我應該提到的唯一方法我可以使用從名單list.sort()和list.copy() –

+0

你可以使用字典的排序方法? –

回答

0

二進制搜索(你可能名稱不正確 - 上述算法不叫「二叉排序」) - 需要排序的序列工作。

它根本無法在一個無序的序列工作,因爲是允許它扔掉的物品中至少有一半在每個搜索步驟的順序。

另一方面,由於您可以使用list.sorted方法,因此您可能需要這麼做:調用l.sort()將在開始搜索操作之前對目標列表進行排序,並且該算法將起作用。

在一個側面說明,避免在程序中調用那些僅僅l - 它也許一個好聽的名字對於有人用數學背景的列表,用來做在紙上的東西 - 但在屏幕上,l難從1 disinguish,並造成不良的源代碼閱讀。對於這種情況下的名字很好,可能是sequencelst,或data。 (list應避免爲好,因爲它會覆蓋內置有同名的Python)。