码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2018-05-18 23:34:35      阅读:300      评论:0      收藏:0      [点我收藏+]

标签:下标   eve   分享图片   结束   data   font   close   span   search   

?二分查找:

前提条件:

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

基本思想

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

 

二分查找

标签:下标   eve   分享图片   结束   data   font   close   span   search   

原文地址:https://www.cnblogs.com/amou/p/9058280.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!