-
目录
-
顺序查找
- 略
-
二分查找
-
优点
- 比较次数少,查找速度快,平均性能好
-
缺点
- 要求待查表为有序列表,且插入删除困难
- 适用于不经常变动而查找频繁的有序列表
-
工作原理
- 假设表中的元素是按升序排序
- 将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分为前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
- 重复以上过程,直到找到满足条件的记录。使查找成功,或直到子表不存在为止,此时查找不成功。
-
效率
- 最优时间复杂度:O(1)
- 最坏时间复杂度:O(logN)
-
python实现
-
二分查找基础版1——左闭右闭
-
代码
-
-
def search1(nums: list[int], target: int) -> int: # 左闭右闭 n = len(nums) start = 0 end = n - 1 while start <= end: mid = (start + end + 1) // 2 if nums[mid] == target: return mid if target < nums[mid]: end = mid - 1 else: start = mid + 1 return -1 temp = [5, 7, 7, 7, 7, 8, 8, 10] print(search1(temp, 10))
-
图解
-
-
二分查找基础版2——左闭右开
-
图解
-
代码
-
-
def search2(nums: list[int], target: int) -> int: # 左闭右开 n = len(nums) start = 0 end = n while start < end: mid = (start + end) // 2 if nums[mid] == target: return mid if target < nums[mid]: end = mid else: start = mid + 1 return -1 temp = [5, 7, 7, 7, 7, 8, 8, 10] print(search2(temp, 10))
-
二分查找改进版
-
图解
-
代码
-
-
def search3(nums: list[int], target: int) -> int: # 左闭右开改进版 n = len(nums) start = 0 end = n while start+1 < end: mid = (start + end) // 2 if target < nums[mid]: end = mid else: start = mid if nums[start] == target: return start else: return -1 temp = [5, 7, 7, 7, 7, 8, 8, 10] print(search3(temp, 10))
- 二分查找相关题目
-
-
-
二叉树查找
- 同:二叉树的遍历
-
哈希查找
python版数据结构6、二分查找
于 2023-08-17 11:15:47 首次发布