Python3实现折半查找
1. 简介
折半查找,也称二分罚查找,是一种针对有序数列进行查找的方法。与顺序查找相比,折半查找算法更高效。具体步骤如下:
1)对一个无序数列,首先要排序;
2)然后设定头尾两个指针,计算中间位置mid (头 尾) / 2;
3)用中间位置数值元素和目标值比较,如果中间元素正好是要查找的元素,则搜索过程结束;如果目标元素大于或者小于中间元素,则在数列大于或小于中间元素的那一半中继续查找,并且从新计算的中间元素开始比较。如果在计算得到数据为空,则代表没找到。折半查找的范围不断缩小一半,所以查找效率较高。
2. 输入随机数列并查找
假设我们有一个随机数列[6, 2, 7, 10, 23, 13, 15],我们要查找其中是否存在数字13。
首先,我们需要对数列进行排序,得到[2, 6, 7, 10, 13, 15, 23]。
然后,我们使用折半查找算法进行查找。经过三次处理后,我们找到了目标数据。
```python
import random
import time
import numpy as np
listNum [6, 2, 7, 10, 23, 13, 15] 示例例子
aimNum (listNum, k1)[0] 随机挑选一个目标数字
print(listNum, aimNum)
print("--------随机数列-----------")
listNumSort sorted(listNum)
print(listNumSort)
print("-------排序完成------------")
print(BinarySearch(listNumSort, aimNum))
```
3. 查找函数
下面是我们实现的折半查找函数,为了更清晰地展示每一步的操作,我们添加了注释。
```python
def BinarySearch(listNum, aimNum):
lowpos 0
highpos len(listNum) - 1
print("当前头坐标:lowpos {}, 尾坐标 highpos {}".format(lowpos, highpos))
i 0
while(1):
i 1
print("第 {} 趟".format(i))
if(lowpos < highpos):
midpos lowpos (highpos - lowpos) // 2
midNum listNum[midpos]
print(" ", end''')
print(listNum, aimNum)
print("当前头坐标lowpos {},尾
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。