在Python中对列表中的数字进行二进制搜索

2024-05-16 01:06:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在研究一个列表中的一个数字的二进制搜索时遇到了this discussion

在别的地方,我提到过要分别求奇数和偶数。但是这种语言是特定的吗?这些信息有点令人困惑。在

对于二进制搜索,我知道高层我需要执行以下步骤

  • 按升序对列表排序
  • 检查列表中的中间项目,如果这是我们完成的数字
  • 如果不是,如果数字大于中间数,则去掉下半部分
  • 如果搜索到的数字小于中间数,则去掉上半部分
  • 一直重复直到找到号码

列表可以是升序或降序,并且可以是floatint个数字。 Python执行上述伪代码的方法是什么? 我在windows上使用python2.7.x。在

**编辑** 上面提到的讨论不包括偶数和奇数列表(至少我看不到任何
我想要求更多的澄清,例如,
-如果我需要区别对待奇偶表
-python中有没有一种方法可以解决这个问题


Tags: 方法语言信息列表排序地方二进制步骤
1条回答
网友
1楼 · 发布于 2024-05-16 01:06:28

除了平分和(如讨论中所列),您可以创建自己的函数。 下面的一种方法是可以做到的。在

如果在python中使用整数除法,它将处理奇偶列表。例如10 / 3 = 3和{}。在

示例代码

import random
def binarySearch(alist, item):
        first = 0
        last = len(alist) - 1
        found = False

        while first<=last and not found:
            midpoint = (first + last)//2            
            if alist[midpoint] == item:
                found = True
            else:
                if item < alist[midpoint]:
                    last = midpoint-1
                else:
                    first = midpoint+1  
        return found

def findThisNum(mynum):

    testlist = [x for x in range(listlength)]

    print "testlist = ", testlist
    print "finding number ", mynum

    if (binarySearch(testlist, findnum)) == True:
        print "found %d" %mynum
    else:
        print "Not found %d" %mynum




#### Main_Function ####

if __name__ == "__main__":
    #

    #Search 1 [ Even numbered list ]
    listlength = 10    
    findnum = random.randrange(0,listlength)
    findThisNum(findnum)     

    #Search 2 [ [ Odd numbered list ]
    listlength = 13    
    findnum = random.randrange(0,listlength)
    findThisNum(findnum)

    #search 3  [ find item not in the list ]

    listlength = 13    
    findnum = random.randrange(0,listlength) + listlength
    findThisNum(findnum)

输出

^{pr2}$

相关问题 更多 >