现实利用中有时要对一个序列或者列表数值进行查找 , 折半查找作为一种简单利用的有序列表查找方式 , 比力常用 。
需要这些哦
python3 pycharm
windows7情况
方式/
1简介:
折半查找 , 也称二分罚查找 , 是针对有序数列进行查找的方式 。 比拟于挨次查找 , 利用折半查找算法的效率更高 。
也就是说:
1)对一个无序数列 , 起首要排序;
2)然后设定头从头至尾2个指针 , 计较 mid(中心位置) = (头+从头至尾)/2
3)用中心位置数值元素和方针值比力 , 若是中心元素正好是要查找的元素 , 则搜刮过程竣事;若是方针元素大于或者小于中心元素 , 则在数列大于或小于中心元素的那一半中查找 , 并且继续从新计较的中心元素起头比力 。 若是在计较获得数据为空 , 则代表没找到 。
折半查找的规模不竭缩小一半 , 所以查找效率较高 。
文章插图
2输入 随机数列 [6, 2, 7, 10, 23, 13, 15] 然后查找 13是否存在
起首进行排序
listNumSort = sorted(listNum)
然后 进行折半搜刮
颠末三趟处置后 找到方针数据 。 完当作搜刮 。
文章插图
31)利用构建随机数列
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查找函数 , 为看的较着一点 , 加了注释
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(" ", ='') 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(" ", ='') print(listNum, aimNum) print(" 新中值小于方针值 头坐标后移1:当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos,midNum)) else: highpos = midpos - 1 print(" ", ='') print(listNum, aimNum) print(" 新中值小于方针值 从头至尾坐标前移1:当前头坐标lowpos = {},从头至尾坐标highpos={},新中值坐标midpos = {},新中值midNum={}".format(lowpos, highpos, midpos,midNum)) return None
推荐阅读
- win7回收站删除了怎么恢复
- 顺序表中插入一个新元素C++怎样实现
- WPS如何实现化学式、数学公式中的批量下标
- 怎样实现剪切板图片黏贴功能
- 怎样实现网站的流量统计
- 重载减号运算符在C++中怎样实现
- Win7是否能删除Ctrl+Alt+Del界面中任务管理器
- DCOM在Win7 64位和32位的配置
- win7系统怎么设置隐藏电脑桌面的计算机图标
- win7系统怎么设置隐藏电脑桌面的回收站图标