zoukankan      html  css  js  c++  java
  • 二分法查找

    二分法查找是一种快速查找方法,时间复杂度低,逻辑简单易懂,总的来说就是不断除以2......

    例如:需要查找有序数组nums里面某个关键字key的位置,那么首先确认下nums的中位数mid,分为3种情况:

    1)nums[mid] > key,说明key在nums中心的左边范围;

    2)nums[mid] < key,说明key在nums中心的右边范围;

    3)nums[mid] == key,说明key在nums的中心位置;

    范围每次缩小一半,需要写个死循环,直到找到位置;

    二分法唯一要求数组是有序的

    def BinarySearch(nums,key):
        min = 0  #记录数组的最小位置
        max = len(nums) - 1  #记录数组的最大位置
        if key in nums:
            #建立一个死循环,直到找到位置
            while True:
                #计算的到中位数,注意一定要加int(),防止是偶数时,出现小数情况
                mid = int((min+max)/2)
                #key 在nums的左边
                if nums[mid] > key:
                    max = mid - 1
                #key在nums的右边
                elif nums[mid] < key:
                    min = mid + 1
                #key在nums的中心位置
                elif nums[mid] == key:
                    return mid
        else:
            return "%s不在%s里面"%(key,nums)
    
    if __name__ == '__main__':
        nums = [1,2,5,7,9,12,15,18]
        n1 = 15
        n2 = 20
        print(BinarySearch(nums,n1))
        print(BinarySearch(nums,n2))
  • 相关阅读:
    2017寒假练习赛总结(实时更新)
    NOIP
    挖坑--总结
    BZOJ3709: [PA2014]Bohater
    BZOJ3714: [PA2014]Kuglarz
    BZOJ2276: [Poi2011]Temperature
    VIJOS P1543极值问题
    BZOJ2749: [HAOI2012]外星人
    BZOJ2173: 整数的lqp拆分
    BZOJ1100: [POI2007]对称轴osi
  • 原文地址:https://www.cnblogs.com/ff-gaofeng/p/12096356.html
Copyright © 2011-2022 走看看