一、二分排序法

  二分排序要求序列(序列可是数组,可是Python里的列表)中元素有序排列,代码定义一个函数,接受一个有序数组和一个元素,如果指定的元素包含在数组中,就返回该元素的位置

一、过程:

                                     

     1. 比如0-99,要找出的数是20,二分法的猜测思路,不是一个个依次猜,而是每次都猜测中间元素;

     2. 第一次,首位是0,末尾是99,则猜49,49>20,向下取整,则把high指向49减1,即48;

     3. 循环,第二次猜(0+48)的一半,自动向下取整数部分,即24,24>20,则把high指向24减1,即23

     4. 循环,第三次猜(0+23)的一半,取整数部分,即11,11<20,则把low指向11加1,即12;

     5.  循环,第四次猜(12+23)的一半,取整数部分,即17,17<20,则把low指向17加1,即18;

     6.  循环,第三次猜(18+23)的一半,取整数部分,即20,20==20,找到了;

二、代码:


def binary_search(list, item):
    low = 0                        # 设置首位为列表下标为0的位置
    high = len(list) - 1           # 设置末位为列表长度减1

    while low <= high:             # 当首位和末位不重合,只要范围没缩小到只包含一个元素
        mid = int((low + high) / 2) # 只要范围是大于1个元素,就一直猜测范围中间的元素为待求元素
        guess = list[mid]          
        if guess == item:              
            return mid                   
        elif guess < item:
            low = mid + 1
        else:
            high = mid - 1
    return None
my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))
print(binary_search(my_list, 5))


三、输出:

  1
  2

猜你喜欢

转载自blog.csdn.net/YYHEZB/article/details/80489995