Update binary_search.py
This commit is contained in:
		| @@ -1,10 +1,52 @@ | ||||
| ''' | ||||
| File: binary_search.py | ||||
| Created Time: 2022-11-25 | ||||
| Author: Krahets (krahets@163.com) | ||||
| Created Time: 2022-11-26 | ||||
| Author: timi (xisunyy@163.com) | ||||
| ''' | ||||
|  | ||||
| import sys, os.path as osp | ||||
|  | ||||
| sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__)))) | ||||
| from include import * | ||||
|  | ||||
| """ 二分查找(双闭区间) """ | ||||
| def binary_search(nums, target): | ||||
|     # 初始化双闭区间 [0, n-1] ,即 i, j 分别指向数组首元素、尾元素 | ||||
|     i, j = 0, len(nums) - 1 | ||||
|     while i <= j: | ||||
|         m = (i + j) // 2  # 计算中点索引 m | ||||
|         if nums[m] < target:  # 此情况说明 target 在区间 [m+1, j] 中 | ||||
|             i = m + 1 | ||||
|         elif nums[m] > target:  # 此情况说明 target 在区间 [i, m-1] 中 | ||||
|             j = m - 1 | ||||
|         else: | ||||
|             return m  # 找到目标元素,返回其索引 | ||||
|     return -1  # 未找到目标元素,返回 -1 | ||||
|  | ||||
|  | ||||
| """ 二分查找(左闭右开) """ | ||||
| def binary_search1(nums, target): | ||||
|     # 初始化左闭右开 [0, n) ,即 i, j 分别指向数组首元素、尾元素+1 | ||||
|     i, j = 0, len(nums) | ||||
|     # 循环,当搜索区间为空时跳出(当 i = j 时为空) | ||||
|     while i < j: | ||||
|         m = (i + j) // 2  # 计算中点索引 m | ||||
|         if nums[m] < target:  # 此情况说明 target 在区间 [m+1, j) 中 | ||||
|             i = m + 1 | ||||
|         elif nums[m] > target:  # 此情况说明 target 在区间 [i, m) 中 | ||||
|             j = m | ||||
|         else:  # 找到目标元素,返回其索引 | ||||
|             return m | ||||
|     return -1  # 未找到目标元素,返回 -1 | ||||
|  | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     target = 6 | ||||
|     nums = [1, 3, 6, 8, 12, 15, 23, 67, 70, 92] | ||||
|  | ||||
|     # 二分查找(双闭区间) | ||||
|     index = binary_search(nums, target) | ||||
|     print("目标元素 6 的索引 = ", index) | ||||
|     # 二分查找(左闭右开) | ||||
|     index = binary_search1(nums, target) | ||||
|     print("目标元素 6 的索引 = ", index) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user