二分查找

Posted 在这里, 意淫和实干都值得尊重

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

?二分查找:

前提条件:

二分查找只能在有序的列表内进行查找

基本思想

1. 在一个有序的列表内,查找你想要的数字.
2. 先设定起始下标,与结束下标,然后取出中间下标的值
3. 让中间坐标的值,与要查找的值进行比对
    1.如果中间值等于要查找的值,直接返回中间值
    2.如果中间值,小于要查找的值,那么将中间值的下标加一,作为下一次查找的起始下标
    3.如果中间值,大于要查找的值,那么将中间值的下标减一作为下一次查找的终止下标
4. 按照此原理直到找到为止

精简版:

技术分享图片
def bin_search(data, find_num):
    first = 0
    last = len(data)-1
    while first <= last:
        mid = (first+last)//2
        if data[mid] == find_num:
            return mid
        if data[mid] < find_num:
            first = mid + 1
        if data[mid] > find_num:
            last = mid - 1
View Code

注释版:

技术分享图片
def bin_search(data, find_num):
    # 起始下标
    first = 0
    # 终止下标
    last = len(data)-1
    # 如果这个序列不为空就要一直查找
    while first <= last:
        # 设置中间下标,
        mid = (first+last)//2
        # 如果中间的数, 等于要查找的数, 返回这个数的下标
        if data[mid] == find_num:
            return mid
        # 如果中间的数, 小于要查找的数, 将中间数的下标加一, 作为下一步要查找的起始下标
        if data[mid] < find_num:
            first = mid + 1
        # 如果中间的数, 大于要查找的数, 将中间数的下标减一, 作为下一步要查找的末尾下标
        if data[mid] > find_num:
            last = mid - 1
View Code

递归版:

技术分享图片
def bin_search(data, find_num):
    first = 0
    last = len(data) - 1
    mid = (first + last) // 2
    if data[mid] == find_num:
        return mid
    elif data[mid] < find_num:
        bin_search(data, mid + 1, find_num)
    else:
        bin_search(data, first, mid - 1)
View Code

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

代码题(12)— 二分查找

二分查找代码

PHP实现二分查找算法(代码详解)

「算法笔记」一文摸秃二分查找

C语言二分查找