排序为蟒蛇

排序为蟒蛇

问题描述:

使用二进制搜索功能的索引值我被任务是设计一个返回给定目录内的给定项目的索引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

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

二进制搜索(你可能名称不正确 - 上述算法不叫“二叉排序”) - 需要排序的序列工作。

它根本无法在一个无序的序列工作,因为是允许它扔掉的物品中至少有一半在每个搜索步骤的顺序。

另一方面,由于您可以使用list.sorted方法,因此您可能需要这么做:调用l.sort()将在开始搜索操作之前对目标列表进行排序,并且该算法将起作用。

在一个侧面说明,避免在程序中调用那些仅仅l - 它也许一个好听的名字对于有人用数学背景的列表,用来做在纸上的东西 - 但在屏幕上,l难从1 disinguish,并造成不良的源代码阅读。对于这种情况下的名字很好,可能是sequencelst,或data。 (list应避免为好,因为它会覆盖内置有同名的Python)。