python3实现折半查找(win7)

现实利用中有时要对一个序列或者列表数值进行查找,折半查找作为一种简单利用的有序列表查找方式,比力常用。

东西/原料

  • python3 pycharm
  • windows7情况

方式/步调

  1. 1

    简介:

    折半查找,也称二分罚查找,是针对有序数列进行查找的方式。比拟于挨次查找,利用折半查找算法的效率更高。

    也就是说:

    1)对一个无序数列,起首要排序;

    2)然后设心猿意马头从头至尾2个指针,计较 mid(中心位置) = (头+从头至尾)/2

    3)用中心位置数值元素和方针值比力,若是中心元素正好是要查找的元素,则搜刮过程竣事;若是方针元素大于或者小于中心元素,则在数列大于或小于中心元素的那一半中查找,并且继续从新计较的中心元素起头比力。若是在计较获得数据为空,则代表没找到。

    折半查找的规模不竭缩小一半,所以查找效率较高。

  2. 2

    输入 随机数列 [6, 2, 7, 10, 23, 13, 15]  然后查找 13是否存在

    起首进行排序

    listNumSort = sorted(listNum)

    然后 进行折半搜刮 

    颠末三趟处置后 找到方针数据。完当作搜刮。

  3. 3

    1)利用构建随机数列 

    2)从数列随机挑一个数作为方针数字

    3) 排序

    4)查找

    import randomimport timeimport numpy as np

    listNum = random.choices(range(1, 34), k=10, weights=range(1, 34))listNum = [6, 2, 7, 10, 23, 13, 15]  #演示例子aimNum = random.choices(listNum, k=1)[0]# aimNum = random.choices(listNum)print(listNum, aimNum)print("--------随机数列-----------")listNumSort = sorted(listNum)print(listNumSort)print("-------排序完当作------------")print(BinarySearch(listNumSort, aimNum))

  4. 4

    查找函数,为看的较着一点,加了注释

    def BinarySearch(listNum, aimNum):    lowpos = 0    highpos = len(listNum) - 1    print("当前头坐标:lowpos = {}, 从头至尾坐标 highpos={}".format(lowpos, highpos))    i = 0    while(1):        i = i + 1        print("第 %d 趟"%i)        if(lowpos <= highpos):            midpos = lowpos + (highpos - lowpos) // 2            midNum = listNum[midpos]            print("  ", end='')            print(listNum, aimNum)            print("当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos , midNum))            if midNum == aimNum:                print(listNum, aimNum)                print("找到! 当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos,midNum))                return midpos            elif midNum < aimNum:                lowpos = midpos + 1                print("  ", end='')                print(listNum, aimNum)                print("  新中值小于方针值 头坐标后移1:当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos,midNum))            else:                highpos = midpos - 1                print("  ", end='')                print(listNum, aimNum)                print("  新中值小于方针值 从头至尾坐标前移1:当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos,midNum))    return None

  5. 5

    排序:

    [6, 2, 7, 10, 23, 13, 15] 13

    酿成

    [2, 6, 7, 10, 13, 15, 23]

  6. 6

    一趟搜刮

    第 1 趟

      [2, 6, 7, 10, 13, 15, 23] 13

    当前头坐标lowpos = 0,从头至尾坐标highpos=6,新中值坐标midpos = 3,新中值midNum=10

      [2, 6, 7, 10, 13, 15, 23] 13

      新中值小于方针值 头坐标后移1:当前头坐标lowpos = 4,从头至尾坐标highpos=6,新中值坐标midpos = 3,新中值midNum=10

  7. 7

    二趟:

    第 2 趟

      [2, 6, 7, 10, 13, 15, 23] 13

    当前头坐标lowpos = 4,从头至尾坐标highpos=6,新中值坐标midpos = 5,新中值midNum=15

      [2, 6, 7, 10, 13, 15, 23] 13

      新中值小于方针值 从头至尾坐标前移1:当前头坐标lowpos = 4,从头至尾坐标highpos=4,新中值坐标midpos = 5,新中值midNum=15

  8. 8

    三趟:找到!

    第 3 趟

      [2, 6, 7, 10, 13, 15, 23] 13

    当前头坐标lowpos = 4,从头至尾坐标highpos=4,新中值坐标midpos = 4,新中值midNum=13

    [2, 6, 7, 10, 13, 15, 23] 13

    找到! 当前头坐标lowpos = 4,从头至尾坐标highpos=4,新中值坐标midpos = 4,新中值midNum=13

注重事项

  • 先排序后查找
  • python3 +win7+pycharm情况
  • 发表于 2019-03-04 20:00
  • 阅读 ( 824 )
  • 分类:其他类型

0 条评论

请先 登录 后评论
admin
admin

0 篇文章

作家榜 »

  1. xiaonan123 189 文章
  2. 汤依妹儿 97 文章
  3. luogf229 46 文章
  4. jy02406749 45 文章
  5. 小凡 34 文章
  6. Daisy萌 32 文章
  7. 我的QQ3117863681 24 文章
  8. 华志健 23 文章

联系我们:uytrv@hotmail.com 问答工具