• python-二分查找错误示范


    # !/use/bin/env python
    # -*-conding:utf-8-*-

    # author:shanshan

    """
    二分查找
    原理:
    1,必须要是排序后的
    2,通过查找中间位置得数,是否与之相等
    相等-->即为该数字
    查找的数字小于中间位置的数 --->那么值肯定在左侧,就需要从左侧到此中间值 继续查找
    查找的数字小于中间位置的数 --->那么值肯定在右侧,就需要从有此中间值到右侧 继续查找
    """
    a = [1, 3, 4, 6, 7, 8, 9, 11, 15, 17, 19, 21, 22, 25, 29, 33, 38, 69, 107]
    ""


    # print(len(a)) # 19


    def erfen(search_num, iter_list): # 错误算法
    start_index = 0
    end_index = len(iter_list) - 1 # 18
    mid = (start_index + end_index) // 2 # 9 取整,而不能用/
    print(mid, iter_list[mid])
    if start_index < end_index:
    if search_num < iter_list[mid]:
    print('中间值:{}'.format(iter_list[mid]))
    # iter_mid = iter_list[:mid]
    print('向左边查找{}'.format(iter_list[:mid])) # 每次你的查找都在新的一个列表中进行查找,随之mid的值并不是原来列表的值了,
    erfen(search_num, iter_list[:mid])
    elif search_num > iter_list[mid]:
    print('中间值:{}'.format(iter_list[mid]))
    # iter_mid = iter_list[mid:]
    print('向右边边查找{}'.format(iter_list[:mid]))
    erfen(search_num, iter_list[:mid])
    else:
    return mid
    else:
    return '填错了,重来'


    # print(erfen(9, a))


    def binary_search(start, end, n, d_list):
    """
    正确递归方式 ,每次改变开始和结束的位置但是列表还是以前的列表
    :param start: 开始位置(左侧位置)
    :param end: 结束位置(右侧位置)
    :param n: 查找的数字
    :param d_list: 列表or元祖
    :return: 返回查找到数字的index或者没有查找到返回-1
    """
    if start < end:
    mid = (start + end) // 2
    if d_list[mid] == n:
    print(mid)
    elif n < d_list[mid]: # 小于中间的值要从左侧查找,此时end应为mid,而不是d_list[mid]
    print('{}小于中间的值{},开始从左侧查找'.format(n, d_list[mid]))
    print('查找范围:{}'.format(d_list[start:mid]))
    binary_search(start, mid, n, d_list) # 只需要更换开始位置和结束位置就可以了
    else: # 大于中间的值要从右侧查找,此时start值应为mid 而不是d_list[mid]
    print('{}大于中间的值{},开始从右侧查找'.format(n, d_list[mid]))
    print('查找范围:{}'.format(d_list[mid:end]))
    binary_search(mid, end, n, d_list) # 只需要更换开始位置和结束位置就可以了
    else:
    return -1 # 代表该数字并不在此列表中


    # print(binary_search(0, len(a), 9, a))


    def erfen2(d_list, search_num):
    left = 0
    right = len(a)
    while left <= right:
    mid = (right + left) // 2
    if search_num > d_list[mid]:
    left = mid
    elif search_num < d_list[mid]:
    right = mid
    else:
    print(mid)
    break

    erfen2(a, 9)
  • 相关阅读:
    deepin 安装微信与QQ
    安装git
    在ubuntu上安装最新稳定版本的node及npm
    如何恢复Initial commit之前的源文件
    git使用之错误分析及解决(持续更新)
    【翻译】在Ext JS 5应用程序中如何使用路由
    【翻译】Sencha Ext JS 5发布
    【翻译】Ext JS 4——Ajax和Rest代理处理服务器端一场和消息的方法
    【翻译】Ext JS——高效的编码风格指南
    【翻译】在Ext JS 5种使用ViewControllers
  • 原文地址:https://www.cnblogs.com/shanshan-test/p/12634491.html
Copyright © 2020-2023  润新知