欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编程题 - 二分搜索查找有序数组的插入位置

程序员文章站 2024-03-15 20:11:54
...

 

A = [0,1,2,3,4,5,6,6,6,7,8,9,10]

def bin_find(A,num):
    if(len(A)==0):
        return -1
    n = len(A)
    if(A[0]>=num):
        return 0
    if(A[n-1]<=num):
        return n
    begin = 0
    end = n  
    while(begin<end):
        print(A[begin:end])
        print(begin,end)
        mid = (begin+end)//2
        if(A[mid]<num and A[mid+1]>=num):
            return mid
        elif(A[mid]>=num and A[mid+1]>=num):
            end = mid
        elif(A[mid]<num and A[mid+1]<num):
            begin = mid
    return -1

print(bin_find(A,6))

这里使用mid+1作为前一个位置判断比较合适,因为begin<end,那么mid = (begin+end)//2在区间比较小的时候会等于begin,那时候mid+1的值为end,合法。