作者最近突然想到了二分查找法,今天进拿出来跟大家分享一下
二分查找法顾名思义就是把列表分成两份进行查找,即先定义个最小下标start=0和一个最大下标end = len(list),然后通过相加对2求余或者除以2在转换为int类型转换为整数,这个随心而定,即center=(start+end)//2或者center=int((start+end)/2)然后得到list[center]的值,判断它与你要查找的数的大小,如果你查找的数比他大则start=center + 1再进行上一步操作,直到找到list[center] = key(你要超找的数),输出结果center即可
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。 此方法适用于不经常变动而查找频繁的有序列表。
二分法 时间复杂度lgn
代码实现:
代码详解: def twosplit(key, list): list.sort() 因为要求的环境必须为有序列表,所以要对列表进行排序 start = 0 定义最小下标为0 end = len(list) - 1 定义最大下标为整个列表长度减1 if key in list: 判断查找的值是否在列表中,不在这立即返回列表中无此元素 while True: while死循环,直到找到目标值 center = int((end + start) / 2) 判断中间下标 if list[center] == key: 判断中间下标在列表中的值是否是目标值,如果是则立即返回center的值 return '您所查找的数{}的下标是{}'.format(key, center) elif list[center] < key: 判断目标值是否大于中间值,大于的话说明目标值在后半部分,如果大于则start=cent start = center + 1 如果大于则start=center+1 else: 如果目标值小于中间值,则目标值在前半部分 end = center - 1 所以end=center-1 return '您查找的数不存在'
二分查找法比较简单,时间复杂度低,非常适合快速查找
如果今天的分享对你有帮助记得点个赞哦!!!