zoukankan      html  css  js  c++  java
  • python实现二分查找

    二分法查找:在一组有序的数据中进行查找,首先与中间的数先比较,如果查找的数大于中间的数,则要查找的数在前半段,否则在后半段,这样就会排除一半的数据,如此递归进行下去,则会极大的提高查找的速度。下面利用python代码实现二分查找

    def binary_search(array,key):
        low = 0
        high = len(array) - 1
        while low < high:
            mid = int((low + high)/2)
            if key < array[mid]:
                high = mid - 1
            elif key > array[mid]:
                low = mid + 1
            else:
                return mid
        return False
    
    
    def main():
        array = [1,2,3,4,5,6,7,8,9,10,14,15,17,21,24,28,35,35,37,39]
        result = binary_search(array,7)
        print(result)
    if __name__ == '__main__':
        main()

    排序后会返回所查数据在列表中的索引,如果没查找到返回False

    面试题:有一递增数值列表list_a,一个数值key, 试着写一个算法,找出列表中第一个大于等于key的数字的下标

    import math
    
    def binary_search(array, key):
        low = 0
        hight = len(array) - 1
        while low < hight:
            print(low)
            mid = math.ceil((low+hight)/2)
            if array[mid] < key:
                print("<")
                low = mid
            elif array[mid] > key:
                print(">")
                hight = mid
            else:
                return mid
            if low + 1 == hight:
                break
        return mid
    
    array = [1,2,3,4,6,7]
    i = binary_search(array, 5)
    print(i)

    注:math.ceil()是向上取整

  • 相关阅读:
    反射
    java 验证码识别
    Spring boot + mybatis + orcale
    JVM内存模型及垃圾回收的研究总结
    Java的Array和ArrayList
    Java中最常见的十道面试题
    session和cookie
    Hibernate的load()和get()区别
    ajax跨域获取网站json数据
    对于Spring的IOc和DI的理解
  • 原文地址:https://www.cnblogs.com/Frange/p/8185773.html
Copyright © 2011-2022 走看看