长春网络营销网站,徐州手机模板建站,用阿里巴巴店铺做公司网站怎么样,全景网投资者互动平台什么是二分查找#xff1a;
二分查找又称折半查找#xff0c;优点是比较次数少#xff0c;查找速度快#xff0c;平均性能好#xff1b;其缺点是要求待查表为有序表#xff0c;且插入删除困难。因此#xff0c;折半查找方法适用于不经常变动而查找频繁的有序列表。 首先…什么是二分查找
二分查找又称折半查找优点是比较次数少查找速度快平均性能好其缺点是要求待查表为有序表且插入删除困难。因此折半查找方法适用于不经常变动而查找频繁的有序列表。 首先假设表中元素是按升序排列将表中间位置记录的关键字与查找关键字比较如果两者相等则查找成功否则利用中间位置记录将表分成前、后两个子表如果中间位置记录的关键字大于查找关键字则进一步查找前一子表否则进一步查找后一子表。重复以上过程直到找到满足条件的记录使查找成功或直到子表不存在为止此时查找不成功。 二分法的使用前提
二分法是进行查找最基础的方法。 由于实现方法是使用 leftright 两个指针每次将搜索区间缩小一半因此它是一种时间复杂度为 O(logn) 的方法。 在使用二分法时一定要注意以下几点
数组应该是分段有序的这样有利于缩小搜索区间。如果数组中存在重复元素那么二分法返回的下标便不是唯一的根据区间的不同定义可以返回下标的左界和右界。二分法的逻辑十分简单但边界条件的判断是重中之重要将两种不同的区间定义辨析清楚。 二分查找代码
#二分查找用于判断元素是否存在于一个有序的列表里
#二分查找用于判断元素是否存在于一个有序的列表里
def binary_search_0(alist,item):nlen(alist)if n0:return Falseelse:midn//2if item alist[mid]:return Trueelif itemalist[mid]:return binary_search_0(alist[:mid],item)elif itemalist[mid]:return binary_search_0(alist[mid1:],item)
def binary_search_1(alist,item):first0lastlen(alist)-1while firstlast:mid(firstlast)//2if alist[mid]item:return Trueelif itemalist[mid]:lastmid-1elif itemalist[mid]:firstmid1return False
if __name____main__:alist[3,5,7,9,12,15,17,24,35,46]print(binary_search_0(alist,24))print(binary_search_0(alist,777))print(binary_search_1(alist,24))print(binary_search_1(alist,777))