二分查找
- 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后 fp 两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
1 #使用循环实现二分法(非递归) 2 def binary_search(alist,v): 3 n=len(alist) 4 start=0 5 end=n-1 6 while start<=end: 7 mid=(start+end)//2 8 #判断中间值与比较的值v 9 if alist[mid] == v: 10 return True 11 elif alist[mid] > v: #左边列表查找 12 end=mid-1 13 else: 14 start=mid+1 15 return False 16 17 #递归方式实现 18 def binary_search2(alist,v): 19 n=len(alist) 20 #递归出口 21 if n==0: 22 return False 23 mid=n//2 24 if alist[mid] == v: 25 return True 26 elif alist[mid] < v: #右边列表查找 27 return binary_search(alist[mid+1:],v) 28 else : 29 return binary_search(alist[0:mid],v) 30 31 if __name__ == '__main__': 32 alist=[1,2,3,4,5,6,7,8,9] 33 print(binary_search(alist,9)) 34 print(binary_search(alist,19)) 35 print(binary_search2(alist,9)) 36 print(binary_search2(alist,19))
正是江南好风景